Могу ли я получить исходное целевое имя из целевого псевдонима?

#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}")