Путь к целевому выходному файлу - PullRequest
44 голосов
/ 03 декабря 2010

У меня есть целевая библиотека .so, созданная add_library, и мне нужно передать абсолютный путь к этой библиотеке во внешний скриптТеперь у меня есть ${LIBRARY_OUTPUT_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}LangShared${CMAKE_SHARED_LIBRARY_SUFFIX} для этого (LIBRARY_OUTPUT_PATH определено в моем CMakeLists.txt).Для меня это выглядит жестко, потому что он сломается, как только цель будет переименована или некоторые ее свойства будут изменены.Есть ли способ получить абсолютный путь к выводу add_library?

Ответы [ 2 ]

46 голосов
/ 08 апреля 2013

Для этого следует использовать генераторное выражение .

Из документов для add_custom_command и документов для выражений генератора:

Аргументы COMMAND могут использовать "выражения генератора" ...

Выражения генератора оцениваются во время генерации системы сборки для получения информации, специфичной для каждой конфигурации сборки.

В этом случае, если ваша целевая библиотека называется «MyLib», выражение генератора, представляющее полный путь к встроенной библиотеке, будет:

$<TARGET_FILE:MyLib>
23 голосов
/ 19 декабря 2010

Попробуйте:

get_property(fancy_lib_location TARGET fancy_lib PROPERTY LOCATION)
message (STATUS "fancy_lib_location == ${fancy_lib_location}")

Где fancy_lib - цель, созданная с помощью add_library (fancy_lib SHARED ...).

. Я обнаружил, что это работает напрямую с генераторами Makefile, но есть еще много работыдля генераторов Visual Studio, поскольку значение fancy_lib_location не соответствует ожидаемому:

  1. fancy_lib_location будет содержать встроенную ссылку на специфичную для Visual Studio Studio ссылку $(OutDir), которая у вас будетзаменить значением переменной CMAKE_BUILD_TYPE CMake (которая разрешается в нечто вроде Debug или Release).
  2. По крайней мере для CMake 2.8.1 и по крайней мере для целей Visual Studio,и если вы установили переменную CMAKE_DEBUG_POSTFIX, то она будет не включаться в значение (что может быть или не быть ошибкой, я не знаю).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...