Wykonywanie poleceń CMake print przed wykonaniem

Pracuję nad dużym projektem C++ zbudowanym z CMake na Linuksie. CMake działa dobrze, tworząc hordę plików Makefile w drzewie modułów i aplikacji. Uruchomienie GNU make prowadzi do błędów linkera. Jak mogę zmusić make do wydrukowania dokładnych poleceń przed ich uruchomieniem?

Opcja-d nie wyświetla poleceń, ale wiele informacji, które nie były pomocne.

Opcja-n wypisuje wszystkie polecenia, ale ich nie uruchamia, więc nie mogę stwierdzić, czy dokładnie były problemy jest. Badając stdout z make-n, nie widzę żadnych poleceń, które są istotne. Podejrzewam, że niektóre polecenia zmieniają się w zależności od wyników wcześniejszych poleceń, a hierarchia plików Makefile utrudnia określenie, co naprawdę się dzieje.

Nie widzę innych opcji na stronie make ' s man , które wydają się pomocne.
Author: Peter Mortensen, 2011-01-26

3 answers

Całkiem pewne, że to zadziała:

make VERBOSE=1

Powinieneś również być w stanie dodać to do swoich Cmakelistów.txt, aby to na stałe ustawić.

set(CMAKE_VERBOSE_MAKEFILE on)

Jest to omówione w CMake FAQ .

 62
Author: Bill Lynch,
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
2018-08-31 16:09:51

Dla plików Makefile generowanych przez automake, spróbuj:

make V=1
 8
Author: k107,
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
2018-09-03 18:17:36

Opcją, która ma zastosowanie do GNU make i działa z dowolnym plikiem Makefile, niezależnie od tego, czy jest generowany przez CMake czy nie, jest użycie opcji --trace make. Spowoduje to wydrukowanie poleceń make, które są wykonywane i nadal je wykonują.

Dotyczy to wszystkich poleceń, nie tylko tych, które VERBOSE=1 lub V=1 uruchamiają drukowanie wygenerowanych w CMake/automake plików Makefile.

I jeszcze inną alternatywą na Linuksie jest uruchomienie make pod strace , jako strace -f -e trace=execve make <make options>. Wyniki ze strace będą obejmować każdy proces, który jest wykonywany, przez make, przez skrypt powłoki, który sprawia, że Run, itd.

Na przykład, możesz zauważyć, że wygenerowany przez CMake plik makefile wykonuje /usr/bin/cmake -E __run_co_compile <lots of options ...> i nadal zastanawiać się, jakie są dokładne wywołania kompilatora, które to z kolei uruchomi. Można to uzyskać metodą strace ' a.

 1
Author: TrentP,
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
2018-09-03 18:17:10