24

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

4

7 回答 7

18

多年来,我一直在使用Ogapo报告的精细前缀属性破解。有用。

但从 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}")
于 2014-08-15T14:12:35.810 回答
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()

这一直对我有用

于 2009-06-16T06:20:18.280 回答
2

我发现了一些关于这个主题的很好的讨论:

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

http://www.vtk.org/Bug/bug_view_advanced_pa​​ge.php?bug_id=8366

是否可以使用已弃用的EXECUTABLE_OUTPUT_PATH而不是RUNTIME_OUTPUT_DIRECTORY?我不确定两者之间发生了哪些功能变化,但可能值得一试。

于 2009-02-17T18:36:46.823 回答
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. 

我还没有验证这些变量是否存在,但也许将RUNTIME_OUTPUT_DIRECTORY_DEBUG&&设置RUNTIME_OUTPUT_DIRECTORY_RELEASE为相同的东西可能会起作用。

于 2009-02-22T17:15:18.867 回答
1

到目前为止,我找到的最佳答案是简单地为我的每个目标和数据文件编写CMake 安装命令,并将 MSVC 调试器设置为在安装目录之外运行。这具有使用 CPack 创建安装程序的额外好处。

于 2009-09-21T17:00:09.963 回答
1

对我来说是一个全球性的:

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

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

于 2011-09-09T16:28:00.920 回答
-5

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

笔记

不知道这有多相关,因为我不了解 CMake。

您可以在 Visual Studio 生成事件中使用以下令牌:

$(TargetPath)

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

于 2009-02-20T14:01:14.620 回答