Jak mogę sprawdzić, gdzie g ++ mógł znaleźć plik dołączany? Zasadniczo, jeśli ja
#include <foo.h>
g ++ przeskanuje ścieżkę wyszukiwania, używając dowolnych opcji dołączania, aby dodać lub zmienić ścieżkę. Ale, na koniec, czy jest sposób, bym mógł określić absolutną ścieżkę foo.h, którą g ++ wybrał do kompilacji? Jest to szczególnie istotne, jeśli w niezliczonych ścieżkach wyszukiwania znajduje się więcej niż jeden plik foo.h.
Krótko mówiąc, sposób na osiągnięcie tego ... czy istnieje sposób, aby g ++ powiedział mi, jaka jest jego ostateczna ścieżka wyszukiwania po uwzględnieniu domyślnych i wszystkich opcji dołączenia?
Odpowiedzi:
To da zależności make, które wyświetlają bezwzględne ścieżki plików nagłówkowych:
Jeśli nie chcesz, aby system zawierał (tj.
#include <something.h>
), Użyj:źródło
wypisze również pełną ścieżkę plików dołączanych w formacie, który pokazuje, który nagłówek zawiera które
źródło
clang++ -MM -H
(co jest nieco użyteczną kombinacją).clang++ -H -fsyntax-only ...
jeśli chcesz uniknąć generowania plików wyjściowych (działagcc
też).Jasne użycie
źródło
Jeśli używasz
-MM
lub jednej z powiązanych opcji (-M
itp.), Otrzymasz tylko listę dołączonych nagłówków bez wszystkich innych danych wyjściowych preprocesora (które wydaje się uzyskiwać dzięki sugerowanemug++ -E -dI
rozwiązaniu).źródło
g++ -MM t.cc
nie pokazuje żadnego włączenia, po prostut.o: t.cc
. Czy potrzebuje czegoś innego?/showIncludes
opcji. MSVC nawet wykona wcięcie, aby pokazać zagnieżdżenie nagłówków (nie widzę tego-M
w GCC).