我想用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中获取/生成标准路径?
提前谢谢你。
答案 0 :(得分:1)
使用“make”目标(请参阅BBv2 Custom Commands)。当然,这并不能让你真正理解我的想法。你想要的是创建一个相当复杂的新工具集。您需要阅读文档的extender chapter。特别是tools and generators部分。并加入我们的Boost Build邮件列表,了解详细的问题和调试。
答案 1 :(得分:0)
不完全是你问的问题,但看起来有点类似于帮助。在下面的示例中,我使用gdc编译D语言源文件,并最终将它们与C库链接(编写我自己的C函数需要定义接口d模块,因为d name mangling与C库不同,并且会引发链接问题)。我按照tools and generators部分中描述的内容(请参阅@GrafikRobot的回答)来实现这一点并且非常简单。
以下是示例卡纸文件和代码。
<强> gdc.jam 强>
import type ;
type.register D : d ;
import generators ;
generators.register-standard gdc.compile : D : OBJ ;
actions compile
{
# "echo" $(>) $(<)
"gdc" -c -o $(<) $(>)
}
<强> Jamroot中强>
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
;
<强> hello.d的强>
import std.stdio;
void main()
{
writeln("Hello World!");
static import bye ;
bye.bye();
}
<强> Bye.d 强> 模块再见;
import std.stdio;
void bye()
{
writeln("Good bye");
}