Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Build 更改CMake文件的标准位置_Build_Cmake - Fatal编程技术网

Build 更改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

我有一个源目录,其中有一个名为“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
默认情况下,所有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之间的区别。
第一个选项将只打印帮助,而第二个将主目录设置为当前工作目录