Изменение стандартного местоположения файлов CMake

У меня есть исходный каталог с папкой "phantom -dir/", где я помещаю все сгенерированные файлы, которые мне не нужны. Я хочу поместить все сгенерированные файлы в CMake внутри этого каталога phantom (вместе с другими сгенерированными и "уродливыми" файлами).

Маленький пример:

$ 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.

Я знаю, что могу сделать это с помощью

$ cd phantom-dir/
$ cmake ../

Но для меня это немного утомительно делать каждый раз, когда я хочу перекомпилировать или переделать cmake, прежде всего принимая во внимание, что я много раз меняю свой CMakeLists.txt.

Какие переменные я должен установить в файле CMakeLists.txt для его достижения?

Ответы

Ответ 1

Вы можете использовать недокументированные опции CMake -H и -B, чтобы избежать выхода из исходного каталога. -H указывает путь к основному файлу CMakeLists.txt, а -B указывает путь к вашему желаемому каталогу сборки.

cmake -H. -Bphantom-dir

Обратите внимание, что они недокументированы, и поэтому я предполагаю, что они могут измениться в любое время, когда ребята Kitware чувствуют себя.

Чтобы создать свой проект, не выходя из исходного каталога, вы можете использовать (официальный) вариант --build Это кросс- платформенный способ вызвать выбранный инструмент сборки, и вы можете передать все флаги, которые вы хотите использовать для этого инструмента. например.

cmake --build phantom-dir -- -j3