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?


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


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

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


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)

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


8

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


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ę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.