cmake有类似target_link_options的东西吗?

时间:2014-07-30 17:42:22

标签: cmake

您可以在INTERFACE库上设置COMPILE_OPTIONS( foo ) 那些COMPILE_OPTIONS也将被用户使用 的 FOO

add_library(foo INTERFACE)
target_link_libraries(foo INTERFACE foo_1)
target_compile_options(foo INTERFACE "-DSOME_DEFINE")
add_executable(exe exe.cpp)
target_link_libraries(exe foo)

是否可以为LINK_FLAGS做类似的事情?

3 个答案:

答案 0 :(得分:19)

CMake从3.13版本开始就有target_link_options

target_link_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
  

target_link_options documentation

答案 1 :(得分:15)

根据documentation,没有INTERFACE_LINK_OPTIONS之类的属性。可能是因为INTERFACE_*属性用于描述如何使用目标(如避免违反ODR规则或未定义的引用)和--allow-multiple-definitions等选项与特定库的使用无关(恕我直言)&#39;表示错误。)

无论如何,对于像gcc这样的编译器,您也可以使用target_link_libraries来添加链接器标志:

target_link_libraries(foo INTERFACE "-Wl,--allow-multiple-definition")

但是我不知道如何为视觉工作室做这样的事情。

答案 2 :(得分:8)

你可以试试这样的事情

add_library(foo INTERFACE)
target_link_libraries(foo INTERFACE foo_1)
target_compile_options(foo INTERFACE "-DSOME_DEFINE")
add_executable(exe exe.cpp)
target_link_libraries(exe foo)

set_target_properties(foo PROPERTIES LINK_FLAGS "My lib link flags")
set_target_properties(exe PROPERTIES LINK_FLAGS "My exe link flags")