我具有以下依赖性:
add_library(lib)
add_library(ilib INTERFACE)
add_dependencies(ilib lib)
target_link_libraries(ilib INTERFACE
"-Wl,--whole-archive $<TARGET_FILE:lib> Wl,--no-whole-archive")
add_executable(exe ilib)
当我更改了lib
的某些源代码时,将按预期方式编译并重新构建lib。但是,exe
没有链接新的lib
。如果我使用add_executable(exe lib)
,则exe
将始终链接新的lib
。 (之所以使用ilib
是因为我需要在使用lib
之前对其进行处理。)
答案 0 :(得分:1)
您希望lib
会在与ilib
链接时传播。
但是命令add_dependencies
并未添加传播属性。您需要
# Linking with `ilib` will transitively link with a `lib`
target_link_libraries(ilib INTERFACE lib)
当需要对链接器使用--whole-archive
选项时,可以通过以下方式完成:
target_link_libraries(ilib INTERFACE "-Wl,--whole-archive" lib "Wl,--no-whole-archive")
当解析给定函数的参数时,CMake将发现参数lib
是目标名称,并将添加适当的文件级依赖关系。有了这种依赖关系,只要更改了库文件,可执行文件就会重新链接。