Kompilowanie wielu plików
Zbuduje Pan/Pani program składający się z wielu plików.
Kompilowanie wielu plików to bezpłatna lekcja C Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.
Od kodu źródłowego do programu
Przekształcanie wieloplikowego kodu źródłowego w języku C w plik wykonywalny odbywa się w dwóch etapach: kompilacji i konsolidacji.
Każdy plik .c jest osobno kompilowany do pliku obiektowego. Następnie konsolidator łączy wszystkie pliki obiektowe, rozwiązując odwołania między nimi, w jeden wykonywalny program.
Budowanie jednym poleceniem
Najprostsze podejście przekazuje wszystkie pliki źródłowe jednocześnie do gcc. Kompilator buduje każdy z nich, a następnie automatycznie je konsoliduje.
Flaga -o określa nazwę programu wynikowego. Należy wymienić wszystkie pliki .c; pliki nagłówkowe są dołączane za pomocą #include i nie podaje się ich tutaj.
gcc main.c math_utils.c -o appKompilacja rozdzielna
W większych projektach każdy plik należy kompilować do pliku obiektowego za pomocą -c. Powstaje wtedy plik .o, ale nie odbywa się konsolidacja.
Oddzielna kompilacja oznacza, że po zmianie jednego pliku trzeba ponownie skompilować tylko ten plik, co przyspiesza budowanie dużych projektów.
gcc -c main.c /* produces main.o */
gcc -c math_utils.c /* produces math_utils.o */Etap konsolidacji
Gdy pliki obiektowe są już gotowe, należy połączyć je w plik wykonywalny. W tym przypadku gcc działa jako konsolidator, łącząc pliki obiektowe i rozwiązując symbole między plikami.
Tym razem nie używamy -c, ponieważ chcemy otrzymać końcowy program, a nie kolejny plik obiektowy.
gcc main.o math_utils.o -o appDziałanie konsolidatora
Konsolidator dopasowuje każde użycie symbolu do jego definicji.
Gdy main.o wywołuje add, konsolidator znajduje definicję add w pliku math_utils.o i łączy oba elementy. Dołącza również potrzebny kod biblioteki standardowej.
Błędy niezdefiniowanych odwołań
Jeśli podczas konsolidowania pominięty zostanie plik obiektowy, konsolidator nie znajdzie definicji i zgłosi undefined reference.
Jest to błąd występujący podczas konsolidacji, a nie kompilacji: każdy plik został poprawnie skompilowany, ale w końcowym poleceniu zabrakło wymaganej definicji.
gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */Przydatne flagi ostrzeżeń
Zawsze należy kompilować z włączonymi ostrzeżeniami. -Wall i -Wextra pomagają wcześnie wykrywać prawdopodobne błędy.
Dodanie -std=c11 wybiera standard języka, dzięki czemu zachowanie programu jest przewidywalne w różnych kompilatorach. Flagi te działają zarówno podczas kompilacji jednoetapowej, jak i rozdzielnej.
gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o appŚcieżki do plików nagłówkowych
Gdy pliki nagłówkowe znajdują się w innym katalogu, należy wskazać kompilatorowi miejsce ich wyszukiwania za pomocą -I.
Na przykład -Iinclude dodaje folder include/ do ścieżki wyszukiwania, dzięki czemu #include "math_utils.h" zostanie rozwiązane nawet z innego folderu.
gcc -Iinclude -c src/main.c -o build/main.oZnaczenie ponownej kompilacji
Kompilacja rozdzielna jest szczególnie przydatna, gdy zmienia się tylko jeden plik. Ponownie kompiluje się plik obiektowy tylko dla tego pliku, a następnie wykonuje ponowną konsolidację.
Jeśli jednak zmodyfikują Państwo plik nagłówkowy, trzeba ponownie skompilować każde źródło, które go dołącza, ponieważ tekst pliku nagłówkowego staje się częścią każdego z tych plików.
/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o appAutomatyzacja za pomocą make
Ręczne wpisywanie poleceń szybko staje się uciążliwe. Plik Makefile przechowuje reguły i przebudowuje tylko to, co się zmieniło.
Ten minimalny przykład łączy dwa pliki obiektowe w program app; make śledzi znaczniki czasu plików, aby zdecydować, co należy ponownie skompilować.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.cPełne podsumowanie budowania
Oto cały przebieg dla małego projektu — od plików obiektowych do gotowego programu z włączonymi ostrzeżeniami.
Należy skompilować każde źródło, a następnie połączyć pliki obiektowe. Uruchomienie wyniku pozwoli potwierdzić, że wszystko działa od początku do końca.
gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./appSzybki test
Sprawdź swoją wiedzę na temat procesu budowania programu z wielu plików.
Podsumowanie
Dowiedzieli się Państwo, jak kompilować każdy plik .c do pliku obiektowego za pomocą -c, a następnie łączyć pliki obiektowe w program. Flag -Wall i -I należy używać odpowiednio do włączania ostrzeżeń i określania ścieżek do plików nagłówkowych.
Niezdefiniowane odwołania oznaczają brakujący plik obiektowy podczas konsolidacji. Narzędzia takie jak make automatyzują przebudowę tylko tych elementów, które się zmieniły.
Często zadawane pytania
Czy lekcja „Kompilowanie wielu plików” jest bezpłatna?
Tak — pełny tekst „Kompilowanie wielu plików” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kompilowanie wielu plików”?
Zbuduje Pan/Pani program składający się z wielu plików. Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C Academy?
Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Kompilowanie wielu plików”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?
Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pliki nagłówkowe i źródłowe
- Strażniki dołączania
- extern i konsolidacja
- Kompilowanie wielu plików