2010-10-10 23 views
7

Mam bardzo duży kod, z którego wiele jest starszym kodem. Chcę wiedzieć, który z tych plików bierze udział w kompilacji. Kod jest napisany w kompilatorach GNU, głównie w języku C/C++, ale także w innych programach. Każda rada będzie bardzo ceniona.Jakie pliki są rzeczywiście uwzględniane podczas kompilowania

Dzięki,

Mosze.

Kompiluję pod linuxem mieszankę skryptów/plików Makefile. Chcę jakoś "zawinąć" tę kompilację za pomocą narzędzia, które da wynik wszystkich plików źródłowych użytych w kompilacji, najlepiej z bezwzględnymi nazwami ścieżek.

Co mówisz?

+0

Który system budowy jest używany? To może pomóc w ustaleniu, co się kompiluje.Na przykład, jeśli masz plik Makefile, który może być miejscem do rozpoczęcia. –

+0

możliwy duplikat narzędzia [narzędzie do śledzenia zależności #include] (http://stackoverflow.com/questions/42308/tool-to-track-include-dependencies) –

Odpowiedz

1

dwie opcje przyjść do głowy.

  1. Przetwarza dziennik kompilacji

    Uruchom build, zapisać dziennik, a następnie wyszukać w dzienniku.

  2. Znajdź pliki, które zostaną otwarte podczas kompilacji.

    Można to zrobić, korzystając z narzędzia śledzenia systemu, takiego jak strace lub narzędzia do śledzenia biblioteki, takiego jak ltrace, a następnie zwracaj uwagę na otwarte połączenia.

    Patrz również How can I detect file accesses in Linux?

0
  1. Jak budujesz aplikację? To znaczy. co piszesz w terminalu, żeby go zbudować?
  2. W zależności od odpowiedzi (1), znaleźć odpowiedni program używany do produkcji (tj make, scons itp)
  3. Teraz znajdź plik wejściowy (ów) do tego programu budować, jak Makefile, SConstruct, itp
  4. Look do tego pliku kompilacji i innych plików kompilacji używanych przez niego dowiedzieć się, które źródło pliki iść do budowy
+0

Witam Eli, twoje rozwiązanie może z pewnością zadziałać. Jednak, jak większość kodu jest starszym kodem (zawierającym wiele plików itd.), Wolałbym znaleźć jakiś program "opakowujący", który mógłby filtrować dane dla mnie. Dzięki, Moshe. – Moshe

10

Jeśli chcesz pokazać zawarte nagłówki następnie, czy jest wspierane i jak zrobić to zależy na kompilatorze.

np

C:\test> (g++ --help --verbose 2>&1) | find "header" 
    -print-sysroot-headers-suffix Display the sysroot suffix used to find headers 
    --sysroot=<directory> Use <directory> as the root directory for headers 
    -H       Print the name of header files as they are used 
    -MG       Treat missing header files as generated files 
    -MM       Like -M but ignore system header files 
    -MMD      Like -MD but ignore system header files 
    -MP       Generate phony targets for all headers 
    -Wsystem-headers   Do not suppress warnings from system headers 
    -print-objc-runtime-info Generate C header of platform-specific features 
    -ftree-ch     Enable loop header copying on trees 

C:\test> (cl /? 2>&1) | find "include" 
/FI<file> name forced include file  /U<name> remove predefined macro 
/u remove all predefined macros   /I<dir> add to include search path 
/nologo suppress copyright message  /showIncludes show include file names 

C:\test> _ 

W powyższym przykładzie można zobaczyć odpowiednie opcje dla odpowiednio g ++ i Visual C++.

Cheers & HTH,

. - Alf

2

dla danej jednostki, na przykład zestawiania foo.cpp, dodaj flagi -E -g3 do połączenia g ++. Daje to wstępnie przetworzony kod. Tam możesz sprawdzić, które rzeczy są zawarte.

Powiązane problemy