Имеет ли cmake что-то вроде target_link_options?
Вы можете установить COMPILE_OPTIONS в библиотеке INTERFACE (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?
Ответы
Ответ 1
В соответствии с документацией нет такого свойства, как INTERFACE_LINK_OPTIONS
или что-то еще. Вероятно, потому что INTERFACE_*
свойства, используемые для описания того, как использовать цель (например, исключение нарушения правил ODR или ссылок undefined), и такие параметры, как --allow-multiple-definitions
, не связаны с использованием конкретной библиотеки (IMHO это указание ошибки).
В любом случае, для компилятора типа gcc
вы можете использовать target_link_libraries
для добавления флагов компоновщика:
target_link_libraries(foo INTERFACE "-Wl,--allow-multiple-definition")
Но я не знаю, как сделать что-то подобное для визуальной студии.
Ответ 2
CMake имеет target_link_options
, начиная с версии 3.13
, которая делает именно это.
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
target_link_options
documentation
Ответ 3
Изменить: Современный CMake теперь предоставляет target_link_options()
, как и отвечал здесь.
Вы можете попробовать что-то вроде этого:
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")