Povedzme, že mám projekt, v ktorom som už spustil program CMake v adresári .build:
project/
.build/
.src
V súčasnosti to musím urobiť, aby som spustil zostavenie:
cd .build
make
Rád by som bol schopný behať z koreňa môjho projektu, pravdepodobne s
make -f ./build/Makefile
ale nefunguje to. Chyby sa mi zdajú také
make[1]: CMakeFiles/Makefile2: No such file or directory
make[1]: *** No rule to make target `CMakeFiles/Makefile2". Stop.
make: *** [all] Error 2
Dôvodom je skutočnosť, že program Makefile generovaný CMake predpokladá, že jeho pracovný adresár je rovnaký ako v ktorom sa nachádza (.build).
Je možné, aby CMake vygeneroval makefile tak, že makefile zmení pracovný adresár na miesto, kde sa nachádza?
odpovede:
0 pre odpoveď č. 1Ďalším prístupom by bolo vytvorenie ďalšieho súboru Makefile v adresári, z ktorého chcete spustiť značku, s obsahom napríklad:
all:
cd ./build; make $(MFLAGS)
Potom stačí zadať „make“ z adresára najvyššej úrovne.
Nemyslím si, že existuje spôsob, ako získať cmake na vygenerovanie makefilu, ktorý je možné spustiť z ľubovoľného miesta.
Možno by ste však mohli prinútiť cmake vytvoriť ďalšie pomocné makefile v koreňovom adresári projektu, s niektorými cmake, ako napríklad v CMakeLists.txt:
configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY)
(V prípade potreby nahraďte tento reťazec „$ {CMAKE_SOURCE_DIR}“ výrazom, ktorý sa preloží do koreňového adresára vášho projektu)
Vo svojom zdrojovom strome musíte vytvoriť súbor ProjectRootMakefile.in s obsahom ako:
all:
cd @CMAKE_BINARY_DIR@; make $(MFLAGS)
ktorá sa použije ako šablóna pre koreňový adresár projektu Makefile. (Uistite sa, že pred písmeno „cd“ používate znak tabulátora, nie medzery).
Tieto návrhy som netestoval, ale tu by malo byť dosť, aby som vám dal všeobecnú predstavu.
7 pre odpoveď č. 2
Musíte len povedať, kde je váš základný adresár, nie je potrebné meniť cmake.
make -C your_build_directory