【发布时间】:2013-09-20 12:43:52
【问题描述】:
我对 CMake 很陌生,阅读了一些关于如何使用它的教程,并编写了一些复杂的 50 行 CMake 脚本,以便为 3 种不同的编译器制作程序。这可能总结了我在 CMake 中的所有知识。
现在我的问题是我有一些源代码,当我制作程序时我不想碰/弄乱它的文件夹。我希望所有 CMake 和 make 输出文件和文件夹都进入 ../Compile/,因此我为此更改了 CMake 脚本中的一些变量,并且当我在笔记本电脑上执行类似操作时它工作了一段时间:
Compile$ cmake ../src
Compile$ make
我现在所在的文件夹中有一个干净的输出,这正是我正在寻找的。p>
现在我转移到另一台计算机,重新编译 CMake 2.8.11.2,我几乎回到了原点!它总是将东西编译到我的CMakeLists.txt所在的src文件夹中。
我在 CMake 脚本中选择目录的部分是这样的:
set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/)
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir})
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})
set(CMAKE_BINARY_DIR ${dir})
SET(EXECUTABLE_OUTPUT_PATH ${dir})
SET(LIBRARY_OUTPUT_PATH ${dir}lib)
SET(CMAKE_CACHEFILE_DIR ${dir})
现在它总是以:
-- Build files have been written to: /.../src
我错过了什么吗?
【问题讨论】:
-
几乎不需要设置您设置的所有变量。 CMake 将它们设置为合理的默认值。您绝对应该不修改
CMAKE_BINARY_DIR或CMAKE_CACHEFILE_DIR。如果您删除所有这些set()调用并只执行cd Compile; rm -rf *; cmake ../src会发生什么? -
基本上,只要你在运行 CMake 时在源目录之外,除非你的 CMakeList 明确告诉它,否则它不会修改源目录。
-
@Angew 感谢您的提示,这令人惊讶!我删除了所有这些行,只使用了 cmake ../src ,它就像一个魅力!这太令人惊讶了,因为我之前在第一次学习 CMake 时尝试过,但没有成功。请把你的答案写在官方回复中,给你打个大大的打勾:)
-
救了我的是@Adam Bowen 的评论,“你不能用源内构建为源目录创建一个外源构建”
标签: c++ build makefile cmake output