CMAKE - 通过cmake更改outdir宏

时间:2013-08-20 12:39:34

标签: directory cmake visual-studio-2005 output

在这里阅读其他问题我发现可以更改de visual studio中的outdir宏。我真的搜索过,但没有找到/理解该怎么做。

这很简单。我只想更改Project属性 - >配置属性 - >一般 - >输出目录。因为我知道这将改变outdir宏。

我明白这是通过set_target_property使用某种cmake PROPERTY但我真的没找到。

2 个答案:

答案 0 :(得分:3)

你怀疑这很简单。您需要查看ARCHIVE_OUTPUT_DIRECTORYLIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORY目标属性才能修改outdir路径。

这些都具有特定于配置的变体(例如ARCHIVE_OUTPUT_DIRECTORY_DEBUG),并且都可以通过前缀为CMAKE_的同名全局CMake变量进行初始化。

所以,你可以这样做。

set_target_properties(MyExe PROPERTIES RUNTIME_OUTPUT_DIRECTORY <custom path>)

或者,影响所有目标,

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <custom path>)

NB。来自文档:

  

多配置生成器(VS,Xcode)将每个配置子目录附加到指定目录。

以下是显示此行为的示例。它编写了自己的简单C ++源文件,因此您需要做的就是将其复制到一个文件夹,调用CMake然后尝试在Debug,Release,MinSizeRel和RelWithDebInfo中构建生成的解决方案。测试VS2012。无论构建类型如何,可执行文件始终都以<build dir>/Exes/Debug结尾,类似地,库始终位于<build dir>/Libs/Debug

cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project(Example)

file(WRITE lib.hpp "void Print();\n")
file(WRITE lib.cpp "#include<iostream>\nvoid Print() { std::cout << \"Hello World\\n\"; }\n")
file(WRITE main.cpp "#include \"lib.hpp\"\nint main() { Print(); return 0; }\n")

set(ArchiveOutputDir ${CMAKE_BINARY_DIR}/Libs/Debug)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${ArchiveOutputDir})

set(RuntimeOutputDir ${CMAKE_BINARY_DIR}/Exes/Debug)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RuntimeOutputDir})

add_library(MyLib lib.cpp lib.hpp)
add_executable(MyExe main.cpp)
target_link_libraries(MyExe MyLib)

答案 1 :(得分:0)

最后,对我有用的是将target_link_libraries的完整路径放在带有调试前缀和优化前缀的指向释放配置和relwithdebinfo配置以释放路径和调试到调试。我也脱掉了link_directories ......如果我不理解,我不会,但它对我有用!