1

在 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,但我需要将 -lwhatever 添加到 bar 的 target_link_libraries 中,否则我在编译时会丢失符号。

target_link_libraries(bar foo -lwhatever)

不能公开透明吗?

4

1 回答 1

1

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

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

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

现在的替代方法是使用LINK_FLAGStarget 属性foo来指定链接标志。然后,您还可以在指定的位置检查该属性,bar以避免必须对选项进行两次硬编码,从而有效地将其INTERFACE_*手动转换为属性。但这已经差不多了。

于 2014-11-12T10:33:10.087 回答