我编写了一些C ++软件并使用GNU autotools管理整个项目。
我有一些C ++代码的部分非常详细,所以我制作了一个脚本" generator.rb"它会自动生成一个文件" generated.cpp"。
我有一个构建目标" generated.cpp"构造" generated.cpp"来自" object_list.txt"
到目前为止,一切正常。
现在我想#include this" generated.cpp"另一个文件" handwritten.cpp"。
因为据说automake会自动计算对包含文件的依赖性,所以我希望它能够:
rebuild" generated.cpp"在构建" handwritten.o"时,如果它不存在或不是最新的
触发一个新的" handwritten.o"每当object_list.txt发生变化时构建
那我怎么能这样做呢?
备注:我的源代码树就是这样:
./
\_src/
| \_handwritten.cpp
|_design/
| \_object_list.txt
\_tools/
\_generator.rb
备注:我的构建树就是这样:
build/
\_gcc_debug/
|_src/
| \_handwritten.o
\_design/
\_generated.cpp
答案 0 :(得分:1)
因为据说automake会自动计算对包含文件的依赖性
由于Automake生成的Makefile生成依赖项作为编译的副作用,因此作为构建的一部分创建的文件需要特殊处理。您必须告诉Automake在尝试任何正常编译之前构建这样的文件。这是使用BUILT_SOURCES完成的,例如:
BUILT_SOURCES = generated.cpp
...然后编写创建generated.cpp
所需的规则。