Zmiana standardowej lokalizacji plików CMake

Mam katalog źródłowy z folderem o nazwie "phantom-dir/", w którym umieszczam Wszystkie wygenerowane pliki, których nie potrzebuję. Chcę umieścić wszystkie wygenerowane przez CMake pliki w tym katalogu phantom (razem z innymi wygenerowanymi i" brzydkimi " plikami).

Mini przykład:

$ 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

Domyślnie wszystkie pliki CMake (CMakeCache.txt, cmake_install.cmake, Makefile, CMakeFiles) są zapisywane w katalogu roboczym. Ale ja chcę coś takiego:

$ 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

To znaczy: Makefile w bieżącym katalogu (to make, " cmake . && make"), ale pozostałe wygenerowane pliki w katalogu "phantom".

I know I can make it with:

$ cd phantom-dir/
$ cmake ../

Ale to trochę męczące dla mnie robić to za każdym razem chcę ponownie skompilować lub remake cmake, przede wszystkim biorąc pod uwagę, że modyfikuję wiele razy Moje Cmakelisty.txt.

Jakie zmienne muszę ustawić w Cmakelistach.plik txt w celu jego osiągnięcia?

 22
Author: Peregring-lk, 2012-12-04

1 answers

Możesz użyć nieudokumentowanych opcji CMake -H i -B, aby uniknąć opuszczania katalogu źródłowego. -H określa ścieżkę do głównych Cmakelist.plik txt oraz -B określa ścieżkę do wybranego katalogu kompilacji.

cmake -H. -Bphantom-dir

Zauważ, że są one nieudokumentowane, więc przypuszczam, że mogą się zmienić w dowolnym momencie, na jaki faceci z Kitware poczują.

Aby zbudować swój projekt bez opuszczania katalogu źródłowego, możesz skorzystać z (oficjalnej) opcji --build to jest wieloplatformowy sposób wywołania wybranego narzędzia budowania i możesz przekazać do tego narzędzia wszelkie flagi, które chcesz. np.

cmake --build phantom-dir -- -j3
 38
Author: Fraser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 15:33:09