在src / foo中,我创建了与-lwhatever链接的lib foo
add_library(foo foo.cpp)
target_link_libraries(foo -lwhatever)
在src / bar中我使用foo
add_executable (bar bar.cpp)
target_link_libraries(bar foo)
可能要感谢LTO,但是我需要添加-lwwithbar的target_link_libraries,否则我在编译时缺少符号。
target_link_libraries(bar foo -lwhatever)
不能透明地完成吗?
答案 0 :(得分:1)
从CMake 3.0开始,CMake缺少INTERFACE_LINK_FLAGS
目标属性,这将使这成为可能。
这里的问题实际上是使用target_link_libraries
来指定链接器标志并不是最聪明的设计决策。本着target_compile_options
精神的单独命令是可取的。
我认为这是对CMake的疏忽。如果您有相关的用例,您可能会争辩在未来的CMake版本中包含target_link_flags
命令。如果这是您主要关心的问题,请随时联系开发人员的邮件列表。
现在的替代方法是使用foo
的{{3}}目标属性来指定链接标志。然后,您还可以在指定bar
的位置检查该属性,以避免必须对选项进行两次硬编码,从而有效地将其转换为INTERFACE_*
属性。但这和它一样好。