(Mam Linux Ubuntu 9.10, więc rozszerzenie dla pliku wykonywalnego to plik wykonywalny.out) Właśnie dostaję się do programowania modułowego (programowanie z wieloma plikami) w C i chcę wiedzieć jak skompiluj wiele plików w jednym pliku Makefile. Na przykład, jaki byłby plik Makefile do kompilowania tych plików: main.c, dbAdapter.c, dbAdapter.h? (Nawiasem mówiąc, jeśli jeszcze tego nie wiesz, główna funkcja jest w main.c) Czy ktoś mógłby umieścić link do dokumentacji pliku Makefile?Skompiluj wiele plików C z make
Odpowiedz
Zobacz mój Makefile Tutorial: How To Write A Makefile. Udostępnia on dobrze spreparowany plik Makefile, który zbuduje taki projekt (z wieloma plikami źródłowymi C i C++), wyjaśnia, jak to działa, i ostrzega przed typowymi pułapkami, a także słabymi programami makefile, które są zbyt często spotykane w dzikiej dziczy. .
GNU make powinno być tym, czego szukasz.
Opublikowane linki są dobre. Dla konkretnego przypadku możesz to wypróbować. Zasadniczo wszystkie pliki Makefile są zgodne z tym wzorcem. Wszystko inne to skróty i makra.
program: main.o dbAdapter.o
gcc -o program main.o dbAdapter.o
main.o: main.c dbAdapter.h
gcc -c main.c
dbAdapter.o dbAdapter.c dbAdapter.h
gcc -c dbAdapter.c
Kluczową sprawą jest to, że Makefile analizuje reguły sekwencyjnie i buduje, ponieważ niektóre elementy są potrzebne.
Najpierw obejrzy program i zobaczy, że do zbudowania programu potrzebne są coś pod nazwą main.o i dbAdapter.o.
Następnie zostanie znalezione główne urządzenie. Jednak do zbudowania main.o potrzebne będą main.c i dbAdapter.h (zakładam, że dbAdapter.h jest zawarty w main.c).
Użyje tych źródeł do zbudowania pliku main.o, kompilując go za pomocą gcc. -c wskazuje, że chcemy tylko kompilować.
Robi to samo z dbAdapter.o. Kiedy ma te dwa pliki obiektów, jest gotowy do połączenia ich. Używa również kompilatora gcc dla tego kroku. -o wskazuje, że tworzymy plik o nazwie program.
... z tym wyjątkiem, że nie powinieneś mocno kodować kompilatora i powinieneś wykorzystać predefiniowane reguły kompilacji ... zobacz mój samouczek. –
Oczywiście masz rację. Ale OP jest stosunkowo nowy w Makefiles i chciałem pokazać podstawowy proces bez żadnego pośrednictwa. – aduric
"Ale OP jest stosunkowo nowy w Makefile" - w którym powinieneś zacząć go od właściwej ścieżki, zamiast umieszczać typowe błędy w swoim pierwszym przykładzie. – mk12
- 1. Skompiluj wiele plików .hs z Haskell - Unix
- 2. Skompiluj wszystkie mniej plików za pomocą makefile
- 3. Skompiluj kod C na telefonie z Androidem
- 4. Skompiluj C# do celu-C
- 5. dlaczego "make" przed "make install"
- 6. Skompiluj PHP Błąd z freetype
- 7. make pobieranie wznawialną użyciu C#
- 8. Skompiluj wszystkie pliki C w katalogu w oddzielne programy.
- 9. Skompiluj kod C# w aplikacji
- 10. Skompiluj używając MONO - C# z referencją do biblioteki C#?
- 11. skompiluj i dodaj plik obiektowy z binarnego z cmake
- 12. Wiele plików dziennika z log4j
- 13. Wiele plików commitlog z Cassandrą
- 14. Prześlij wiele plików z wieżą
- 15. Skompiluj sprawdzanie czasu istnienia stdint.h
- 16. Skompiluj rozszerzenie kodu C# w czasie wykonywania
- 17. Skompiluj i wyrecytuj w C++ używając eclipse
- 18. Skompiluj C, aby umożliwić przepełnienie bufora
- 19. Skompiluj C++ dla różnych wersji Ubuntu
- 20. Skompiluj dwie wersje programu C# automatycznie
- 21. Skompiluj 64-bitową wersję binarną z MinGW (Dev-C++)
- 22. jak wykonać "make" make file
- 23. Skompiluj OpenSSL z opcją "shared"?
- 24. Implementacja `make check` lub` make test`
- 25. Definiowanie zmiennej procesora dla wszystkich plików w make
- 26. Wiele plików pom.xml maven.
- 27. Dlaczego sed pozostawia wiele plików?
- 28. Jak scalić wiele plików PDB?
- 29. Skompiluj VB.NET online?
- 30. Serilog - wiele plików dziennika
Po prostu zaktualizowałem i chętnie usłyszę opinię. –
Link już nie żyje. – Pat
@MichaelAaronSafyan Ponieważ dążysz do obsługi wielu platform, czy masz jakieś rady dotyczące czyszczenia pliku programu, gdy w systemie Windows plik jest wysyłany do $ (program_NAME) .exe? –