Изменение стандартного местоположения файлов 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