build - online - install cmake macos
Cambiando la ubicación estándar de los archivos CMake (1)
Podrías utilizar las opciones CMake -H
y -B
indocumentadas para evitar dejar tu directorio de origen. -H
especifica la ruta al archivo principal CMakeLists.txt, y -B
especifica la ruta al directorio de compilación deseado.
cmake -H. -Bphantom-dir
Tenga en cuenta que estos no están documentados, por lo que supongo que podría cambiar en cualquier momento que los chicos de Kitware sientan.
Para construir su proyecto sin abandonar su directorio de origen, puede hacer uso de la opción (oficial) --build
Esta es una forma multiplataforma de invocar su herramienta de compilación elegida, y puede pasar los indicadores que desee a esta herramienta. p.ej
cmake --build phantom-dir -- -j3
Tengo un directorio de origen con una carpeta llamada "phantom-dir /" donde pongo todos los archivos generados que no necesito. Quiero poner todos los archivos generados por CMake dentro de este directorio fantasma (junto con otros archivos generados y "feos").
Un mini ejemplo:
$ 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
De forma predeterminada, todos los archivos CMake (CMakeCache.txt, cmake_install.cmake, Makefile, CMakeFiles) se escriben en el directorio de trabajo. Pero, quiero algo así:
$ 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
Eso significa: el Makefile en el directorio actual (make, "cmake. && make"), pero los archivos generados restantes dentro del directorio "fantasma".
Sé que puedo hacerlo con:
$ cd phantom-dir/
$ cmake ../
Pero es un poco tedioso para mí hacerlo cada vez que quiero volver a compilar o rehacer cmake, sobre todo teniendo en cuenta que estoy modificando muchas veces mi CMakeLists.txt.
¿Qué variables debo establecer en el archivo CMakeLists.txt para lograrlo?