您可以在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)
小智 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)
但我不知道如何为视觉工作室做这样的事情.
你可以尝试这样的事情
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)