простая структура папок похожа на
Root
CMakeLists.txt
SubA
CMakeLists.txt
some files to be built...
SubB
CMakeLists.txt
some files to be built...
Предполагая, что у меня есть add_library(SubDirLib fooX.cpp)
как в SubA/CMakeLists.txt
, так и в SubB/CMakeLists.txt
, где X — это A и B соответственно, как я могу связать две библиотеки SubA/SubDirLib
и SubB/SubDirLib
в Root/CMakeLists.txt
? Обратите внимание, что это будет конфликт имен, если я позвоню
add_subdirectory(SubA)
add_subdirectory(SubB)
в Root/CMakeLists.txt
Я думаю, что это похоже на то, что делает namespace
в C++: разработчикам не нужно беспокоиться о конфликтах за пределами локальной области видимости, поскольку вызов всегда может быть направлен на полный путь пространства имен. Один конкретный пример: у нас есть библиотека с именем utils
, включающая множество служебных функций в указанной подпапке. Наличие SubA/Utils
и SubB/Utils
довольно распространено на родительском уровне, не так ли?
Нет, в отличие от C++, имена целей в CMake имеют вид Глобальный и должны быть уникальный. Хотя проект предполагается построить как автономный, нет ничего плохого в использовании «общих» имен (например, «utils») для целей. И многие реальные проекты (даже широко используемые) предназначены для создания только как автономные. Но если вы планируете разрешить использовать проект с add_subdirectory
, вам нужно сделать его цели уникальными. Например. добавив к ним соответствующий префикс: LibA-utils
.
У вас нет другого выбора, кроме как назначить имена разные для обеих целей. Почему вы хотите, чтобы эти имена были одинаковыми? (Зная, что мы могли бы дать вам более конкретные советы).