#cmake
#cmake
Вопрос:
Если я создам цель псевдонима в CMake, например
add_library(my::foo ALIAS my_foo)
есть ли какой-либо способ запросить имя базового целевого имени из целевого псевдонима?
Мой вариант использования:
- Общая кодовая база C с несколькими независимыми модулями. Корневая папка этой кодовой базы содержит
CMakeList.txt
файл, который будет добавлен вadd_subdirectory
проект с ее помощью. Согласно нашему соглашению , напримерmy_foo
, всегда будет находиться в подпапке с именемmy_foo
. Кроме того,my_foo
он будет экспортирован как целевой псевдонимmy::foo
и использоваться как таковой в проекте. Обратите внимание, чтоmy_foo
это всегдаINTERFACE
цель, поэтому я не могу установить для нее какие-либо пользовательские свойства. - Мы используем conan для управления зависимостями сторонних библиотек. Все модули, имеющие такие зависимости, содержат
conanfile.txt
- Для удобства я хочу написать функцию (расположенную в корневом CMakeList общей кодовой базы), которая принимает список целевых модулей, которые проект хочет использовать, сканирует все из них на наличие файлов conan и устанавливает зависимости для используемых. Я хочу иметь возможность передавать
my::foo
в качестве аргумента этой функции, но извлекатьmy_foo
из этого аргумента внутри функции, чтобы получить соответствующее имя папки для сканирования conanfile
Любые другие предложения, которые решают проблему в соответствии с моим вариантом использования, также приветствуются!
Ответ №1:
Целевой псевдоним имеет специальное свойство, в котором хранится имя исходной цели: ALIASED_TARGET.
get_target_property(my_foo_original my::foo ALIASED_TARGET)
message(STATUS "Alias my::foo refers to the target ${my_foo_original}")