Подтвердить что ты не робот

Cmake RUNTIME_OUTPUT_DIRECTORY в Windows

Я использую для управляя моими кросс-платформенными сборками, и я все разработал, кроме этой проблемы. Я установил RUNTIME_OUTPUT_DIRECTORY в каталог bin/, где хранятся файлы данных. В Linux это работает отлично. В Windows исполняемые файлы помещаются в подкаталог Debug/Release в зависимости от типа сборки. Есть ли способ получить для копирования исполняемый файл в соответствующий каталог или (еще лучше) полностью прекратить использование этих подкаталогов?

4b9b3361

Ответ 1

Я использую тонкий префикс свойства hack, о котором сообщает Ogapo годами. Он работает.

Но с версии CMake версии 2.8 существует официальная поддержка для исключения подкаталогов Release/Debug в Windows.

Используйте либо глобальные переменные CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>, либо свойства target-target t21, например:

SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")

Ответ 2

Я не уверен, являются ли эти каталоги преднамеренными или ошибками, но с риском передовой несовместимости вы можете добавить:

if (MSVC_IDE)
    # hack to get around the "Debug" and "Release" directories cmake tries to add on Windows
    set_target_properties (${NAME} PROPERTIES PREFIX "../")
endif()

это работает для меня

Ответ 3

Я нашел несколько хороших дискуссий по этой теме:

http://www.cmake.org/pipermail/cmake/2008-April/021355.html

http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=8366

Можно ли использовать устаревший EXECUTABLE_OUTPUT_PATH вместо RUNTIME_OUTPUT_DIRECTORY? Я не уверен, какая функциональность изменилась между 2, но, возможно, стоит попробовать.

Ответ 4

Некоторые переменные cmake имеют встроенные версии.

CMAKE_C_FLAGS 
    the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS(). 
CMAKE_C_FLAGS_DEBUG 
    compiler flags for compiling a debug build from C sources. 
CMAKE_C_FLAGS_RELEASE 
    compiler flags for compiling a release build from C sources. 
CMAKE_C_FLAGS_RELWITHDEBINFO 
    compiler flags for compiling a release build with debug flags from C sources. 

Я не проверял эти вары, но, возможно, установил RUNTIME_OUTPUT_DIRECTORY_DEBUG && RUNTIME_OUTPUT_DIRECTORY_RELEASE то же самое может работать.

Ответ 5

До сих пор лучшим ответом, который я нашел, является просто написать команды установки CMake для каждой из моих целей и файлов данных и настройте отладчик MSVC для завершения работы с каталогом установки. Это добавило преимущества использования CPack для создания инсталляторов.

Ответ 6

Для меня глобальный:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")

сделал работу, поэтому мне не нужно ее устанавливать для каждой библиотеки (CMake 2.8.4)

Ответ 7

Вам нужно изменить расположение сборки проектов вашей визуальной студии. Перейдите в "Свойства проекта", а на вкладке "Компиляция" укажите "Строить путь вывода", где бы вы ни пожелали.

Примечание

Не знаю, насколько это актуально, поскольку я не знаю о CMake.

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

$(TargetPath)

Это будет путь к местоположению, в котором ваш проект построен, поэтому в зависимости от ваших параметров проекта это будет либо папкой Debug, либо Release.