我有一个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不太好用;我收到循环依赖错误和有关多个规则的投诉。
不要尝试声明目标文件之间的依赖关系。如果存在具有依赖关系的文件,请将它们分解为使用add_library
的单独库,然后使用add_dependencies
和target_link_libraries
声明依赖关系。这样做没有额外的费用。
特别是,考虑一下Object Libraries。