在Windows上使用cmake RUNTIME_OUTPUT_DIRECTORY

the*_*der 17 build-process cross-platform cmake visual-studio

我正在使用来管理我的跨平台构建,除了这个问题,我已经解决了所有问题.我设置RUNTIME_OUTPUT_DIRECTORY了一个bin/存储数据文件的目录.在Linux上,这很好用.在Windows上,可执行文件放在Debug/ Release子目录中,具体取决于构建类型.有没有办法让将可执行文件复制到正确的目录,或者(甚至更好)完全停止使用这些子目录?

Chr*_*uns 14

我一直在使用Ogapo报道的精美前缀属性hack 多年.有用.

但是从CMake版本2.8开始,官方支持避免Windows上的Release/Debug子目录.

使用全局CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>变量或每目标<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>属性,如下所示:

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}")
Run Code Online (Sandbox Code Playgroud)


小智 11

我不确定这些目录是故意的还是错误的,但是冒着前向不兼容的风险,您可以添加:

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()
Run Code Online (Sandbox Code Playgroud)

这一直在为我工作

  • 这对我也很好.对于.lib文件,使用SET_TARGET_PROPERTIES($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX"../") (2认同)