更改CMake文件的标准位置

时间:2012-12-04 21:12:22

标签: 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

默认情况下,所有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(要生成“cmake。&& make”),但其余生成的文件位于“phantom”目录中。

我知道我可以用:

$ cd phantom-dir/
$ cmake ../

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

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

1 个答案:

答案 0 :(得分:32)

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

cmake -H. -Bphantom-dir

请注意,这些都没有记录,所以我想可以随时改变Kitware人的感觉。

要在不离开源目录的情况下构建项目,可以使用(官方)选项--build这是一种调用所选构建工具的跨平台方式,您可以传递任何您想要的标记到这个工具。 e.g。

cmake --build phantom-dir -- -j3