Windows上的cmake RUNTIME_OUTPUT_DIRECTORY
我使用cmake来管理我的跨平台版本,除了这个问题,我已经做好了一切工作。我将RUNTIME_OUTPUT_DIRECTORY
设置为bin/
目录,其中存储了数据文件。在Linux上,这工作正常。在Windows上,根据构建类型,可执行文件将被放置在Debug
/Release
子目录中。有没有办法让cmake将可执行文件复制到正确的目录,或者(甚至更好)完全停止使用这些子目录?Windows上的cmake RUNTIME_OUTPUT_DIRECTORY
我一直在使用多年前由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()
这已经为我工作
这对我来说也很好。对于.lib文件使用SET_TARGET_PROPERTIES($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX“../”) – Torleif 2009-08-28 13:26:28
对我来说,一个全球性的:
set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")
所做的工作,所以我没有将其设置为每个库(CMake的2.8。4)
我假设你正在使用cmake生成的Visual Studio解决方案/项目文件,是这样吗?使用什么版本的Visual Studio?什么版本的cmake? – 2009-02-15 20:04:51
是的,我使用CMake生成解决方案文件(cmake 2.6,VS 2005) – thekidder 2009-02-15 20:33:58