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_* свойство вручную. Но это примерно так же хорошо, как и получается.

Другие вопросы по тегам