更改CMake文件的标准位置

Per*_*-lk 19 build cmake

我有一个源目录,其中包含一个名为"phantom-dir /"的文件夹,其中我放置了我不需要的所有生成的文件.我想将CMake中的所有生成的文件放在这个幻像目录中(与其他生成的和"丑陋的"文件一起).

一个小例子:

$ mkdir cmake-test
$ cd cmake-test
$ echo 'message("Hello World!")' > CMakeLists.txt
$ cmake . | grep "Hello"
Hello World!
$ tree
.
??? CMakeCache.txt
??? CMakeFiles
?   ??? CMakeCCompiler.cmake
?   ??? cmake.check_cache
?   ??? CMakeCXXCompiler.cmake
?   ??? CMakeDetermineCompilerABI_C.bin
?   ??? CMakeDetermineCompilerABI_CXX.bin
?   ??? CMakeDirectoryInformation.cmake
?   ??? CMakeOutput.log
?   ??? CMakeSystem.cmake
?   ??? CMakeTmp
?   ??? CompilerIdC
?   ?   ??? a.out
?   ?   ??? CMakeCCompilerId.c
?   ??? CompilerIdCXX
?   ?   ??? a.out
?   ?   ??? CMakeCXXCompilerId.cpp
?   ??? Makefile2
?   ??? Makefile.cmake
?   ??? progress.marks
?   ??? TargetDirectories.txt
??? cmake_install.cmake
??? CMakeLists.txt
??? Makefile

4 directories, 20 files
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有CMake文件(CMakeCache.txt,cmake_install.cmake,Makefile,CMakeFiles)都写在工作目录中.但是,我想要这样的东西:

$ mkdir cmake-test
$ cd cmake-test
$ mkdir phantom-dir
$ echo 'message("Hello World!")' > CMakeLists.txt
$ // editing CMakeLists.txt to set some cmake variables.
$ cmake . | grep "Hello"
Hello World!
$ tree
.
??? phantom-dir
?   ??? CMakeCache.txt
?   ??? CMakeFiles
?   ?   ??? CMakeCCompiler.cmake
?   ?   ??? cmake.check_cache
?   ?   ??? CMakeCXXCompiler.cmake
?   ?   ??? CMakeDetermineCompilerABI_C.bin
?   ?   ??? CMakeDetermineCompilerABI_CXX.bin
?   ?   ??? CMakeDirectoryInformation.cmake
?   ?   ??? CMakeOutput.log
?   ?   ??? CMakeSystem.cmake
?   ?   ??? CMakeTmp
?   ?   ??? CompilerIdC
?   ?   ?   ??? a.out
?   ?   ?   ??? CMakeCCompilerId.c
?   ?   ??? CompilerIdCXX
?   ?   ?   ??? a.out
?   ?   ?   ??? CMakeCXXCompilerId.cpp
?   ?   ??? Makefile2
?   ?   ??? Makefile.cmake
?   ?   ??? progress.marks
?   ?   ??? TargetDirectories.txt
?   ??? cmake_install.cmake
??? CMakeLists.txt
??? Makefile

4 directories, 20 files
Run Code Online (Sandbox Code Playgroud)

这意味着:当前目录中的Makefile(要生成"cmake.&& make"),但剩余的生成文件位于"phantom"目录中.

我知道我可以用:

$ cd phantom-dir/
$ cmake ../
Run Code Online (Sandbox Code Playgroud)

但是每次我想重新编译或重新制作cmake时,我都有点厌倦,最重要的是考虑到我修改了很多次我的CMakeLists.txt.

我必须在CMakeLists.txt文件中设置哪些变量才能实现呢?

Fra*_*ser 34

您可以使用未记录的CMake选项-H-B避免离开源目录. -H指定主CMakeLists.txt文件-B的路径,并指定所需构建目录的路径.

cmake -H. -Bphantom-dir
Run Code Online (Sandbox Code Playgroud)

请注意,这些都是未记录的,所以我想可以随时改变Kitware人的感觉.

要在不离开源目录的情况下构建项目,可以使用(官方)选项.--build 这是一种调用所选构建工具的跨平台方式,您可以将所需的任何标记传递给此工具.例如

cmake --build phantom-dir -- -j3
Run Code Online (Sandbox Code Playgroud)

  • @Kenny,因为这就是CMake的意思,我想(一个半文档,移动目标12种方式做任何事情):) (6认同)
  • `-H`选项的小提示:注意`cmake -H`和`cmake -H`之间的区别 - 第一个只打印帮助,而第二个将主目录设置为当前工作目录 (5认同)
  • `-H`不再用于此目的(它打印帮助).我不确定`-B`是否仍然存在. (2认同)