Windows上的cmake RUNTIME_OUTPUT_DIRECTORY

问题描述:

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

+0

我假设你正在使用cmake生成的Visual Studio解决方案/项目文件,是这样吗?使用什么版本的Visual Studio?什么版本的cmake? – 2009-02-15 20:04:51

+0

是的,我使用CMake生成解决方案文件(cmake 2.6,VS 2005) – thekidder 2009-02-15 20:33:58

我一直在使用多年前由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}") 

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

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之间哪些功能发生了变化,但可能值得一试。

您需要更改Visual Studio项目的构建位置。转到项目属性,然后在编译选项卡上指定“生成输出路径”以便在任何地方使用。

不知道怎么的相关,这是因为我不知道你的CMake。

您可以使用下面的令牌在Visual Studio中建立的事件:

$(TargetPath)

这将是路径,该项目是建立在位置,所以要根据您的项目设置,这要么是调试或发布文件夹。

一些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以同样的事情可能会奏效。

我不知道,如果这些目录是故意的还是错误的,但在前进的不兼容性的风险,你可以添加:

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

这对我来说也很好。对于.lib文件使用SET_TARGET_PROPERTIES($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX“../”) – Torleif 2009-08-28 13:26:28

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

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

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

所做的工作,所以我没有将其设置为每个库(CMake的2.8。4)