cmake有类似target_link_options的东西吗?

Gro*_*leo 24 cmake

您可以在INTERFACE库(foo)上设置COMPILE_OPTIONS ,这些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)
Run Code Online (Sandbox Code Playgroud)

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

Joã*_*eto 28

CMake target_link_options从版本开始3.13.

target_link_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
Run Code Online (Sandbox Code Playgroud)

target_link_options 文件


小智 17

根据文件,没有这样的财产INTERFACE_LINK_OPTIONS或东西.可能是因为INTERFACE_*用于描述如何使用目标的属性(如避免违反ODR规则或未定义的引用)和类似的选项--allow-multiple-definitions与特定库的使用无关(恕我直言,它表示错误).

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

target_link_libraries(foo INTERFACE "-Wl,--allow-multiple-definition")
Run Code Online (Sandbox Code Playgroud)

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

  • @ruslo:对于cl.exe链接器选项使用`-`而不是`/`,cl.exe接受两者并以`-`开头避免误解为库名 (3认同)

Kis*_*dda 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")
Run Code Online (Sandbox Code Playgroud)