如何使用生成.cpp和.h文件的自定义构建器?

时间:2015-03-05 16:51:57

标签: c++ build scons

我的项目仅由两个文件组成:

text.foo
main.cpp

main.cpp代码如下所示:

#include "foo.h"
#include "bar.h"

int main()
{
 ...
}

我有一个自定义构建器,它接受输入text.foo并生成以下文件作为输出:

foo.h
bar.h
text.cpp
必须编译

text.cpp以生成text.o,而main.o必须链接到.h以生成最终的可执行文件。 main.cpp个文件是.h的依赖项。我需要编写一个SConstruct文件来确保以下内容:

    必须在编译main.cpp之前生成
  1. text.foo个文件
  2. 更改.h时,必须重新生成main.cpp个文件 在编译Program('myProgram', ["main.cpp", "text.foo"]) 之前
  3. 我和Builder和Emitters一起玩,但我似乎无法获得第1点和第2点。 理想情况下,我希望在SConstruct文件中包含以下行:

    {{1}}

1 个答案:

答案 0 :(得分:1)

您可能需要一个知道如何从text.foo

构建text.cpp等的构建器

这有点棘手,因为你从text.foo生成了多个没有任何关系的文件。但是,构建器的发射器应声明它正在创建foo.h,bar.h和text.cpp

然后你只需要

Program('myprogram', ['main.cpp', 'test.cpp'])

你已经完成了,因为scons会注意到main.cpp需要foo.h来构建,并且会发现它有一种生成foo.h和test.cpp的方法,并且会生成它们。