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

How can I use custom builders that generate .cpp and .h files?

我的项目只有两个文件组成:

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 的依赖项。我需要编写一个 SConstruct 文件来确保以下内容:

  1. .h 文件必须在编译 main.cpp 之前生成
  2. text.foo改变时,必须重新生成.h文件 在编译 main.cpp 之前

我正在玩 Builder 和 Emitter,但我似乎无法获得第 1 点和第 2 点。 理想情况下,我希望在 SConstruct 文件中包含以下行:

Program('myProgram', ["main.cpp", "text.foo"])

您可能需要一个知道如何从 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 的方法, 并将生成它们。