我有一个CMake项目。由于某种原因(我不会在这里说,但我可以根据要求提供),我需要一些目标文件,这些文件是在其他库之前编译的同一个库的一部分。具体做法是:
FILES
是源文件列表file_a.c
是FILES
file_d.c
是FILES
file_a.o
必须在编译file_d.c
这就是我现在所拥有的:
set_source_files_properties(
file_a.c
PROPERTIES
OBJECT_OUTPUTS file_a.o
)
set_source_files_properties(
file_d.c
PROPERTIES
OBJECT_DEPENDS file_a.o
)
这适用于Makefile,但它似乎与Ninja不太合适;我收到循环依赖性错误并抱怨有多个规则。
答案 0 :(得分:1)
不要尝试声明目标文件之间的依赖关系。如果存在具有依赖关系的文件,请将它们分解为具有add_library
的单独库,然后使用add_dependencies
和target_link_libraries
声明依赖关系。这样做没有额外的费用。
特别要考虑Object Libraries。