cmake, сохранение флагов ссылок внутренних библиотек
В src/foo я создаю lib foo, связанный с -lwhwhat
add_library(foo foo.cpp)
target_link_libraries(foo -lwhatever)
В src/bar я использую foo
add_executable (bar bar.cpp)
target_link_libraries(bar foo)
Может быть, благодаря LTO, но мне нужно добавить -l чем угодно к target_link_libraries бара, иначе у меня пропущены символы во время компиляции.
target_link_libraries(bar foo -lwhatever)
Разве это не может быть сделано прозрачно?
1 ответ
Начиная с CMake 3.0, в CMake отсутствует INTERFACE_LINK_FLAGS
целевое свойство, которое сделало бы это возможным.
Проблема здесь в том, что использование target_link_libraries
указывать флаги компоновщика было не самым умным дизайнерским решением в первую очередь. Отдельная команда в духе target_compile_options
было бы желательно.
Я считаю это упущением в CMake. Если у вас есть соответствующий вариант использования, вы можете поспорить за включение target_link_flags
команда в будущей версии CMake. Не стесняйтесь обращаться к списку рассылки разработчика, если это вас беспокоит.
Альтернативой на данный момент будет использование LINK_FLAGS
целевое свойство foo
указать флаги ссылки. Затем вы также можете проверить это свойство в точке, где вы указываете bar
чтобы избежать необходимости дважды жестко кодировать параметры, эффективно превращая их в INTERFACE_*
свойство вручную. Но это примерно так же хорошо, как и получается.