您可以在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做类似的事情?
答案 0 :(得分:19)
CMake从3.13
版本开始就有target_link_options
。
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
答案 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")