Build 更改CMake文件的标准位置
我有一个源目录,其中有一个名为“phantom dir/”的文件夹,我把生成的所有不需要的文件放在那里。我想把CMake生成的所有文件都放在这个幻影目录中(以及其他生成的和“丑陋”的文件) 一个小例子:Build 更改CMake文件的标准位置,build,cmake,Build,Cmake,我有一个源目录,其中有一个名为“phantom dir/”的文件夹,我把生成的所有不需要的文件放在那里。我想把CMake生成的所有文件都放在这个幻影目录中(以及其他生成的和“丑陋”的文件) 一个小例子: $ mkdir cmake-test $ cd cmake-test $ echo 'message("Hello World!")' > CMakeLists.txt $ cmake . | grep "Hello" Hello World! $ tree . ├── CMakeCach
$ 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
默认情况下,所有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
这意味着:当前目录中的Makefile(make,“cmake.&&make”),但其余生成的文件位于“phantom”目录中
cmake -H. -Bphantom-dir
我知道我可以做到:
$ cd phantom-dir/
$ cmake ../
但每次我想重新编译或重新制作cmake时,都会觉得有点累,尤其是考虑到我要多次修改我的CMakeLists.txt
为了实现它,我必须在CMakeLists.txt文件中设置哪些变量?您可以使用未记录的CMake选项
-H
和-B
,以避免离开源目录-H
指定主CMakeLists.txt文件的路径,-B
指定所需生成目录的路径
cmake -H. -Bphantom-dir
请注意,这些都是未记录的,所以我想可能会在任何时候改变的厨具家伙喜欢
要在不离开源目录的情况下构建项目,您可以使用(官方)选项这是一种跨平台的方式来调用您选择的构建工具,并且您可以向该工具传递您想要的任何标志。e、 g
cmake --build phantom-dir -- -j3
我们编写了一个脚本,为我们完成所有目录更改。Ie:
build.sh compile
和build.sh configure
这两种方法将执行目录更改、make或cmake以及make install。您的方法的问题是:代码(构建过程)不再是跨平台的。然后,我需要每个已知平台的脚本。也许以脚本模式(-D)执行它的CMake文件将是一个等效的解决方案,但这个解决方案并不优雅(在我看来)。我们使用的是python脚本而不是bash脚本,因此它仍然是跨平台的。但这就是为什么它只是一个评论而不是一个答案,我知道它并没有完全解决你的问题:)我在问题的结尾解释它:这意味着每次我必须编译或重建项目时,都要在这个“构建目录”中移动,当我必须多次这样做时,这变得有点烦人。树的+1
命令。。。在UNIX的近二十年中,这是我第一次看到它-难以置信哦,谢谢!我想通过CMakeLists.txt文件中的“set”命令是不可能的,不是吗?@Kenny因为这就是CMake的意义所在,我想(一个半文档化的移动目标12种做事方式):-H
不再用于此目的(它打印帮助)。我不确定-B
是否仍然存在。有关-H
选项的信息以及对CMake源代码的浏览,请参见。关于-H
选项的小提示:注意CMake-H
和CMake-H之间的区别。
第一个选项将只打印帮助,而第二个将主目录设置为当前工作目录