在Windows上使用cmake RUNTIME_OUTPUT_DIRECTORY

时间:2009-02-12 20:55:53

标签: visual-studio build-process cross-platform cmake

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

7 个答案:

答案 0 :(得分: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}")

答案 1 :(得分: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()

这一直在为我工作

答案 2 :(得分:2)

我在这个主题上找到了一些很好的讨论:

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之间的功能有什么变化,但值得一试。

答案 3 :(得分:1)

某些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. 

我还没有验证这些vars存在,但可能会设置RUNTIME_OUTPUT_DIRECTORY_DEBUG&amp;&amp; RUNTIME_OUTPUT_DIRECTORY_RELEASE对同一件事可能会有效。

答案 4 :(得分:1)

到目前为止,我发现的最佳答案是只为每个目标和数据文件编写CMake install commands,并设置MSVC调试器以用完安装目录。这具有使用CPack创建安装程序的额外好处。

答案 5 :(得分:1)

对我来说是全球性的:

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

完成了工作,所以我不必为每个库设置它(CMake 2.8.4)

答案 6 :(得分:-5)

您需要更改Visual Studio项目的构建位置。转到“项目属性”,然后在“编译”选项卡上指定“构建输出路径”,使其位于您希望的任何位置。

<强> 注意

不知道这与我对CMake的了解有多相关。

您可以在Visual Studio构建事件中使用以下标记:

$(TargetPath)

这将是项目构建位置的路径,因此根据您的项目设置,这将是Debug或Release文件夹。