我正在使用cmake来管理我的跨平台构建,除了这个问题,我已经解决了所有问题。我设置RUNTIME_OUTPUT_DIRECTORY
为bin/
存储数据文件的目录。在 Linux 上,这可以正常工作。在 Windows 上,可执行文件根据构建类型放置在Debug
/Release
子目录中。有没有办法让cmake将可执行文件复制到正确的目录,或者(甚至更好)完全停止使用这些子目录?
7 回答
多年来,我一直在使用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}")
我不确定这些目录是故意的还是错误的,但冒着向前不兼容的风险,您可以添加:
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()
这一直对我有用
我发现了一些关于这个主题的很好的讨论:
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?我不确定两者之间发生了哪些功能变化,但可能值得一试。
一些 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
为相同的东西可能会起作用。
到目前为止,我找到的最佳答案是简单地为我的每个目标和数据文件编写CMake 安装命令,并将 MSVC 调试器设置为在安装目录之外运行。这具有使用 CPack 创建安装程序的额外好处。
对我来说是一个全球性的:
set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")
完成了工作,所以我不必为每个库设置它(CMake 2.8.4)
您需要更改 Visual Studio 项目的构建位置。转到项目属性并在编译选项卡上将“构建输出路径”指定为您希望的任何位置。
笔记
不知道这有多相关,因为我不了解 CMake。
您可以在 Visual Studio 生成事件中使用以下令牌:
$(TargetPath)
这将是构建项目的位置的路径,因此根据您的项目设置,这将是 Debug 或 Release 文件夹。