CMake получить выходной путь - PullRequest
1 голос
/ 20 июня 2019

В моем приложении пользователь может нажать кнопку «Построить». Это вызовет диалоговое окно файла, где пользователь выбирает папку с CmakeCache. После этого я вызову команду cmake --build с system(command), и исполняемый файл будет построен.

Теперь я хотел бы знать путь, по которому был построен исполняемый файл. Мне нужно скопировать файлы в этот путь.

Я знаю, что файл, расположенный в /CMakeCacheFolder/projectname/projectname.dir/Release/projectname.log, содержит журнал компилятора с выходным путем в последней строке. Но есть ли другой способ?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Выходной каталог цели исполняемого файла / библиотеки tgt можно получить с помощью выражения генератора

$<TARGET_FILE_DIR:tgt>

Поскольку это генераторное выражение , его можно использовать только в ограниченных случаях. (CMake документирует каждую команду и параметр, для которых можно использовать выражение генератора).


Если вы знаете, что выходной каталог для цели задается путем присвоения переменной CMAKE_RUNTIME_OUTPUT_DIRECTORY, то вы можете прочитать либо эту переменную, либо свойство цели RUNTIME_OUTPUT_DIRECTORY . В отличие от выражений генератора, значения переменной и свойства могут использоваться везде.

Но обратите внимание, что в случае многоконфигурационных генераторов (например, Visual Studio) имя конфигурации добавляется к значению переменной (или свойства) для получения реального выходного каталога.

0 голосов
/ 20 июня 2019

Не полный ответ, но слишком много для комментария:

Вы можете определить выходные каталоги для исполняемых файлов, общих объектов и библиотек для проекта следующим образом:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

Икогда вы определяете, где строить, у вас теперь есть общий выходной каталог по общеизвестному путиКаталоги также можно задавать на основе конфигурации (Debug/Release/RelWithDebInfo/...) следующим образом:

CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG
CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE
CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO

Надеюсь, что это поможет вам в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...