在这里阅读其他问题,我发现可以更改 de Visual Studio 中的 outdir 宏。我真的搜索过,但没有找到/理解如何去做。
这很简单。我只想更改项目属性-> 配置属性-> 常规-> 输出目录。因为我知道这会改变 outdir 宏。
我知道这是通过 set_target_property 使用某种 cmake 属性,但我真的没有找到方法。
在这里阅读其他问题,我发现可以更改 de Visual Studio 中的 outdir 宏。我真的搜索过,但没有找到/理解如何去做。
这很简单。我只想更改项目属性-> 配置属性-> 常规-> 输出目录。因为我知道这会改变 outdir 宏。
我知道这是通过 set_target_property 使用某种 cmake 属性,但我真的没有找到方法。
正如您所怀疑的那样,这很简单。您需要查看ARCHIVE_OUTPUT_DIRECTORY
、LIBRARY_OUTPUT_DIRECTORY
和RUNTIME_OUTPUT_DIRECTORY
target 属性来修改 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)
最后,对我有用的是将完整路径放在 target_link_libraries 上,并带有调试前缀和优化前缀,以指向发布配置和 relwithdebinfo 配置以发布路径和调试以进行调试。我还取消了链接目录...如果我不明白,我不知道,但它对我有用!