2

我想用 boost 不支持的特定编译器编译一个文件。我制定了一个规则:

rule my_rule ( source : target )
{
    compile_specially source target ;
}

actions compile_specially
{
    my_compile_command $(my_parameters) $(1) -o $(2)
}

现在这段代码将文件构建到 Jamroot 目录中(显然)。但是,我希望它在常规目标路径中构建(bin/gcc-4.4/release/threading-multi/...)。那么如何在 my_rule 中获取/生成标准路径?

先感谢您。

4

2 回答 2

1

使用“make”目标(参见BBv2 自定义命令)。当然,这并不能真正让你得到我认为你所追求的东西。您想要的是创建一个相当复杂的新工具集。您需要通读文档的扩展器章节。特别是工具和生成器部分。并加入我们的 Boost Build 邮件列表,了解详细问题和调试。

于 2010-04-26T13:49:06.267 回答
0

不完全是您的要求,但看起来足够相似以提供帮助。在下面的示例中,我使用 gdc 编译 D 语言源文件并最终将它们与 C 库链接(编写我自己的 C 函数需要定义接口 d 模块,因为 d 名称修改与 C 不同,并且会引发链接问题)。我按照工具和生成器部分中描述的内容(参见@GrafikRobot 的回答)来实现这一点,这很容易。

这是示例 jam 文件和代码。

gdc.jam

import type ;
type.register D : d ;

import generators ;
generators.register-standard gdc.compile : D : OBJ ;

actions compile
{
#    "echo" $(>) $(<)
    "gdc" -c -o $(<) $(>)
}

果酱

import gdc ;

project hello
    : requirements
    <cflags>-O3
    : default-build release

;

lib gphobos2 : : <file>/usr/lib/gcc/x86_64-linux-gnu/4.6/libgphobos2.a <name>gphobos2 ;
lib m : : <name>m ;
lib z : : <name>z ;
lib rt : : <name>rt ;
lib pthread : : <name>pthread <link>shared ;

exe hello
    :
        hello.d
        bye.d

        gphobos2 m z rt pthread
    :
        <link>static
    ;

你好ð

import std.stdio;

void main()
{
  writeln("Hello World!");

    static import bye ;

    bye.bye();
}

Bye.d 模块再见;

import std.stdio;

void bye()
{
  writeln("Good bye");
}
于 2013-01-15T09:42:17.740 回答