1

在这里阅读其他问题,我发现可以更改 de Visual Studio 中的 outdir 宏。我真的搜索过,但没有找到/理解如何去做。

这很简单。我只想更改项目属性-> 配置属性-> 常规-> 输出目录。因为我知道这会改变 outdir 宏。

我知道这是通过 set_target_property 使用某种 cmake 属性,但我真的没有找到方法。

4

2 回答 2

3

正如您所怀疑的那样,这很简单。您需要查看ARCHIVE_OUTPUT_DIRECTORYLIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORYtarget 属性来修改 outdir 路径。

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

所以,你可以做例如

set_target_properties(MyExe PROPERTIES RUNTIME_OUTPUT_DIRECTORY <custom path>)

或者,影响所有目标,

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <custom path>)

注意。从文档:

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

这是一个显示此行为的示例。它编写自己的琐碎 C++ 源文件,因此您需要做的就是将其复制到一个文件夹,调用 CMake,然后尝试在 Debug、Release、MinSizeRel 和 RelWithDebInfo 中构建结果解决方案。用VS2012测试。无论构建类型如何,可执行文件总是以 in 结束<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)
于 2013-08-20T13:45:11.427 回答
0

最后,对我有用的是将完整路径放在 target_link_libraries 上,并带有调试前缀和优化前缀,以指向发布配置和 relwithdebinfo 配置以发布路径和调试以进行调试。我还取消了链接目录...如果我不明白,我不知道,但它对我有用!

于 2015-01-07T18:02:13.917 回答