У вас есть несколько личных библиотек и приложений: libA, libB, libC, appA, appB, которые имеют деревья зависимостей, например:
Код: Выделить всё
appA -> {libA}
libC -> {libA}
appB -> {libB, libC}
Все библиотеки находятся в активной разработке, поэтому всем было бы полезно делиться последними версиями.
Один из подходов — хранить все проекты на одном уровне. и используйте add_subdirectory():
Код: Выделить всё
.
├── appA
├── appB
├── libA
├── libB
└── libC
Код: Выделить всё
appAКод: Выделить всё
add_executable(appA main.cpp)
add_subdirectory(../libA libA)
target_link_library(appA PRIVATE libA)
Код: Выделить всё
libCКод: Выделить всё
add_library(libC ${libc_SRC})
add_subdirectory(../libA libA)
target_link_library(libC PUBLIC libA)
Код: Выделить всё
appBКод: Выделить всё
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
Мобильная версия