Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directory CMAKE-通过CMAKE更改outdir宏_Directory_Cmake_Visual Studio 2005_Output - Fatal编程技术网

Directory CMAKE-通过CMAKE更改outdir宏

Directory CMAKE-通过CMAKE更改outdir宏,directory,cmake,visual-studio-2005,output,Directory,Cmake,Visual Studio 2005,Output,阅读这里的其他问题,我发现可以在de visual studio中更改outdir宏。我真的找过了,但不知道怎么做 很简单。我只想更改项目属性->配置属性->常规->输出目录。因为我知道这会改变outdir宏 我知道这是通过使用某种cmake属性来设置目标属性实现的,但我真的没有找到方法。正如您所怀疑的,这非常简单。您需要查看、和目标属性来修改outdir路径 这些变量也都有特定于配置的变量(例如,ARCHIVE\u OUTPUT\u DIRECTORY\u DEBUG),并且都可以由同名的全局

阅读这里的其他问题,我发现可以在de visual studio中更改outdir宏。我真的找过了,但不知道怎么做

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


我知道这是通过使用某种cmake属性来设置目标属性实现的,但我真的没有找到方法。

正如您所怀疑的,这非常简单。您需要查看、和目标属性来修改outdir路径

这些变量也都有特定于配置的变量(例如,
ARCHIVE\u OUTPUT\u DIRECTORY\u DEBUG
),并且都可以由同名的全局CMake变量初始化,并在前面加上一个
CMake

所以,你可以做

set_target_properties(MyExe PROPERTIES RUNTIME_OUTPUT_DIRECTORY <custom path>)
set\u target\u属性(MyExe属性运行时\u输出\u目录)
或者,为了影响所有的目标,

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <custom path>)
set(CMAKE\u运行时\u输出\u目录)
注意。从文档中:

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

下面是一个显示这种行为的示例。它编写自己的普通C++源文件,所以你需要做的就是把它复制到一个文件夹中,调用cFube,然后尝试在调试、发布、MsisiSeleL和ReluDeBiFo中构建结果解决方案。使用VS2012进行测试。无论构建类型如何,可执行文件总是以
/Exes/Debug
结尾,同样,库也总是以
/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)
cmake_最低要求(版本2.8.11致命错误)
项目(示例)
文件(写入lib.hpp“void Print();\n”)

文件(WRITE lib.cpp“#include\nvoid Print(){std::cout最后,对我有效的方法是将完整路径放在目标链接库上,使用调试前缀和优化前缀指向发布配置,使用relwithdebinfo配置发布路径并调试。我还删除了链接目录……如果我不懂,我不知道,但它对我有效!

我尝试了所有的then.D我不工作,我会读更多关于那个的,但只是为了确定。我想做的是更改$(outdir)设置为Release或Debug的宏。它是在附加库依赖项上自动添加的。例如,我希望将所有更改为always Debug,如果我真的在VS上调试,则不匹配。是否设置了
CMAKE\u ARCHIVE\u OUTPUT\u DIRECTORY\u Debug
变量(或任意变量)在调用
add_library
add_executable
之前,这些默认的CMake变量用于在声明本地目标属性的位置初始化这些属性。例如,要在同一目录中创建所有库,而不考虑构建类型,只需设置
CMake_ARCHIVE_OUTPUT_directory(输出目录)的所有版本
相同的值。经过很多天的尝试,没有工作。我有这个:c:\dir\anotherDir\Release(发布版本),但我想要这个:c:\dir\anotherDir\Debug(发布版本)在附加库目录中,我添加了一个示例CMakeLists.txt。我还注意到您已将问题标记为VS2005。如果这对您不起作用,我认为VS版本可能是问题所在。这当然适用于VS2010以后的版本。最后,对我起作用的是将完整路径放在目标链接上带有调试前缀和优化前缀的白羊座指向发布配置,relwithdebinfo配置指向发布路径,调试指向调试。我还删除了链接目录…我不明白,但它对我有用!谢谢你的帮助!我真的很感激!你能在这里发布cmakelist.txt的部分供参考吗?对不起,公司代码我再也无法访问了。