Używanie CMake z GNU Make: Jak mogę zobaczyć dokładne polecenia?

281

Korzystam z CMake z GNU Make i chciałbym zobaczyć wszystkie polecenia dokładnie (na przykład jak kompilator jest wykonywany, wszystkie flagi itp.).

GNU make ma --debug, ale nie wydaje się pomocne, czy są jakieś inne opcje? Czy CMake zapewnia dodatkowe flagi w wygenerowanym pliku Makefile w celu debugowania?

Nils
źródło
2
Lub, aby dodać kilka wyszukiwanych terminów, Jak ukryć pełne, pełne wiersze poleceń i wyświetlać tylko krótkie, ciche wyniki procentowe w kolorze.
ulidtko
Nadzbiór inny
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
parasrish

Odpowiedzi:

369

Po uruchomieniu make dodaj, VERBOSE=1aby zobaczyć pełne dane wyjściowe polecenia. Na przykład:

cmake .
make VERBOSE=1

Lub możesz dodać -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONdo polecenia cmake, aby uzyskać stałe pełne polecenie z wygenerowanych plików Makefiles.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Aby zmniejszyć niektóre mniej interesujące wyniki, możesz użyć następujących opcji. Ta opcja CMAKE_RULE_MESSAGES=OFFusuwa linie takie jak [33%] Budowanie obiektu C ... , a polecenie --no-print-directorymake nie drukuje bieżącego katalogu odfiltrowującego linie takie jak make[1]: Entering directoryi make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
richq
źródło
12
Te rozwiązania sprawiają, że jest zbyt gadatliwy, drukuje dużo CMake i sprawia, że ​​elementy wewnętrzne nie są interesujące. Czy jest jakiś sposób, aby wyświetlać tylko polecenia kompilacji i łączenia (tj. Co jest zwykle istotne w przypadku problemów z debugowaniem). Być może nawet wyświetla polecenie, które się nie powiodło.
Tronic
Największy hit Google poleca „jeśli chcesz zobaczyć tylko wiersze poleceń g ++, powinieneś użyć grep & Co. - jeśli to możliwe - w połączeniu z pełnymi Makefiles” . Być może programiści z dużym doświadczeniem cmake mają inne porady.
Trevor Boyd Smith,
7
Nawiasem mówiąc, jeśli jesteś na platformie, która ją obsługuje, cmake -GNinja . ; ninja -vpokazuje bardzo ładne pełne wyjście z minimalnym puchem.
richq
10
Pojedyncza linia ...cmake --build . -- VERBOSE=1
letmaik
Najwyraźniej muszę pracować z nowszą wersją cmake, ponieważ w moim katalogu kompilacji nie ma plików makefile po uruchomieniu cmake ...
DrumM
80

Wygodnie jest ustawić opcję w CMakeLists.txtpliku jako:

set(CMAKE_VERBOSE_MAKEFILE ON)
James Hirschorn
źródło
3
Nie rób tego dla własnych projektów. Nie wszyscy Twoi użytkownicy mogą chcieć zobaczyć pełne wyniki kompilacji. Nie zmuszaj tego do tego, że wszyscy konsumują Twoją bibliotekę. CMAKE_VERBOSE_MAKEFILE powinny być domyślnie wyłączone, a wybór użytkownika, jeśli jest potrzebny, do celów debugowania.
Ela782,
3
Więc? Zawsze możesz dodać ją jako zmienną pamięci podręcznej, jeśli masz wielu programistów i chcesz dać im wybór. Ale tak, w wydanej wersji projektu domyślnie powinieneś go wyłączyć.
James Hirschorn
1
Jest to świetna opcja podczas korzystania z qt.io QtCreator, ponieważ cmake jest wywoływany przez GUI. Dziękuję Ci!
Grant Rostig,
9

Lub po prostu wyeksportuj zmienną środowiskową VERBOSE do powłoki w następujący sposób: export VERBOSE=1

makerj
źródło
8

Jeśli używasz GUI CMake, przełącz się do widoku zaawansowanego, a następnie opcja nazywa się CMAKE_VERBOSE_MAKEFILE.

SteveL
źródło
Jak ustawić tę opcję w plikach tekstowych, bez korzystania z GUI?
osgx
4

Próbowałem czegoś podobnego, aby zapewnić -ggdb flaga jest obecna.

Zadzwoń do make w czystym katalogu i grep flagę, której szukasz. Szuka debugraczej niż ggdbbym po prostu pisał.

make VERBOSE=1 | grep debug

-ggdbFlaga była na tyle niejasne, że tylko polecenia kompilacji pojawiło się.

Alexander Griffith
źródło