Как настроить проект CMake для использования локальных библиотек?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как настроить проект CMake для использования локальных библиотек?

Сообщение Anonymous »

Представьте себе следующую настройку:
У вас есть несколько личных библиотек и приложений: libA, libB, libC, appA, appB, которые имеют деревья зависимостей, например:

Код: Выделить всё

appA -> {libA}
libC -> {libA}
appB -> {libB, libC}
Где appA зависит от libA, а appB также зависит от libA транзитивно от libC.
Все библиотеки находятся в активной разработке, поэтому всем было бы полезно делиться последними версиями.
Один из подходов — хранить все проекты на одном уровне. и используйте add_subdirectory():

Код: Выделить всё

.
├── appA
├── appB
├── libA
├── libB
└── libC
CMakeLists.txt например:

Код: Выделить всё

add_executable(appA main.cpp)
add_subdirectory(../libA libA)
target_link_library(appA PRIVATE libA)
CMakeLists.txt например:

Код: Выделить всё

add_library(libC ${libc_SRC})
add_subdirectory(../libA libA)
target_link_library(libC PUBLIC libA)
CMakeLists.txt например:

Код: Выделить всё

add_executable(appB main.cpp)
add_subdirectory(../libB libB)
add_subdirectory(../libC libC)
target_link_library(appA PRIVATE libB libC)
Этот подход работает хорошо, поскольку он добавляет исходный код непосредственно в сборку, поэтому вы можете редактировать его напрямую из любого места, и все остальные могут видеть изменения (в отличие от использования пакетов, поскольку он основан на последняя установка).
Однако этот подход, очевидно, не работает, если вы когда-нибудь захотите использовать библиотеки за пределами этой среды (клонируйте libA и поместите ее в ту же среду). уровень libC, чтобы использовать libC в чем-то другом, фу)
Есть ли какой-нибудь способ настроить find_package(), чтобы он работал точно? например, add_subdirectory(), если установлена ​​определенная переменная среды? Таким образом можно заменить все использование add_subdirectory()? Я хотел бы зафиксировать изменения, чтобы они работали должным образом при использовании через установку, но затем я могу настроить свою среду так, чтобы она работала так, как описано выше для разработки.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -libraries
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»