cmake,保留内部库的链接标志

时间:2014-11-10 18:55:56

标签: gcc cmake lto

在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)

不能透明地完成吗?

1 个答案:

答案 0 :(得分:1)

从CMake 3.0开始,CMake缺少INTERFACE_LINK_FLAGS目标属性,这将使这成为可能。

这里的问题实际上是使用target_link_libraries来指定链接器标志并不是最聪明的设计决策。本着target_compile_options精神的单独命令是可取的。

我认为这是对CMake的疏忽。如果您有相关的用例,您可能会争辩在未来的CMake版本中包含target_link_flags命令。如果这是您主要关心的问题,请随时联系开发人员的邮件列表。

现在的替代方法是使用foo的{​​{3}}目标属性来指定链接标志。然后,您还可以在指定bar的位置检查该属性,以避免必须对选项进行两次硬编码,从而有效地将其转换为INTERFACE_*属性。但这和它一样好。