Как упростить связывание нескольких библиотек в CMake? - PullRequest
1 голос
/ 03 апреля 2019

Я новичок в CMake и пытаюсь научиться использовать его для простого проекта.Если у меня есть файл CMakeLists.txt, который выглядит следующим образом:

add_executable(alpha alpha.cpp)
add_executable(beta beta.cpp)

add_library(one STATIC one.cpp)
add_library(two STATIC two.cpp)

target_link_libraries(alpha one)
target_link_libraries(alpha two)
target_link_libraries(beta one)
target_link_libraries(beta two)

Есть ли способ упростить этот тип шаблона?Я хотел бы определить что-то вроде all_libraries, содержащее как one, так и two, а затем выполнить только одно связывание на двоичный файл.Есть ли способ сделать это?

1 Ответ

3 голосов
/ 03 апреля 2019

Вы можете использовать библиотеки интерфейсов:

add_library(all_libraries INTERFACE)
target_link_libraries(all_libraries
    INTERFACE
        one
        two
)
... then later ...
target_link_libaries(alpha PUBLIC all_libraries)

Вы можете использовать переменную:

set(all_libraries one two)
.. then later ..
target_link_libraries(alpha PUBLIC ${all_libraries})

Примечания:

  • Я бы посоветовал всегда явно указыватьключевые слова PUBLIC, PRIVATE и INTERFACE.
  • Я бы пошел с интерфейсными библиотеками.Приятно иметь большой проект, выставлять различные комбинации библиотек в качестве единой интерфейсной библиотеки, чем связывать другой большой проект с этим интерфейсом.Дает хороший контроль и внешний вид.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...