CMake - копирование DLL в выходной каталог времени выполнения - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать простой CMake, который извлекает библиотеки DLL из Qt и копирует их в каталог, в котором cmake создает мой исполняемый файл.

Отлично работает с использованием g ++ или clang, но MSVC (Visual Studio 2017) создает каталог Debug или Release .

Я не могу найти способ получить путь к реальному каталогу, в который записан исполняемый файл (${CMAKE_CURRENT_BINARY_DIR} возвращает родительский каталог Release или Debug ).

Я видел людей, использующих целевое свойство RUNTIME_OUTPUT_DIRECTORY, но когда я его использую, оно пустое.

Есть идеи, как я могу это сделать? Я не хочу менять каталог вывода, я просто хочу знать его путь (поэтому я не хочу менять значение RUNTIME_OUTPUT_DIRECTORY)

Спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

В Visual Studio, во время настройки шаг (когда обрабатываются CMakeLists.txt файлы) тип сборки равен не задан , поэтому нет сборка- Тип -зависимая переменная или свойство могут использоваться напрямую. Вместо этого следует использовать генератор-выражения .

Например, выходной каталог для исполняемого файла или цели библиотеки можно извлечь с помощью выражения генератора $<TARGET_FILE_DIR:tgt>. Он вернет полный каталог с уже добавленными «Release /» или «Debug /».

Обратите внимание, что выражения генератора могут использоваться, только если их использование явно разрешено в документации. Например, их нельзя использовать в команде message().

В качестве альтернативы, вы можете явно установить переменную CMAKE_RUNTIME_OUTPUT_DIRECTORY , поэтому для каждого типа сборки просто добавьте соответствующий подкаталог к ​​нему. Но для извлечения этого подкаталога вам следует снова обратиться к выражениям генератора: $<CONFIG>.


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

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