Kompilacja i scalanie programów w linii poleceń gcc i make

Podobne dokumenty
Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Fragment wykładu z języka C ( )

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Programowanie Proceduralne

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wstęp do programowania. Wykład 1

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Programy użytkowe (utilities)

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Tworzenie oprogramowania

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wykład 4. Środowisko programistyczne

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

WYKŁAD 1 - KONSPEKT. Program wykładu:

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

Programowanie Systemów Wbudowanych

Tworzenie oprogramowania

Wstęp do programowania

Systemy Operacyjne. Ćwiczenia

Praktyka programowania projekt

Laboratorium 2: Biblioteki statyczne i dynamiczne w języku C. mgr inż. Arkadiusz Chrobot

Programowanie niskopoziomowe

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

1 Zapoznanie się ze środowiskiem Xenomai.

Programowanie w asemblerze Linkowanie

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Utworzenie pliku. Dowiesz się:

Java jako język programowania

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

GNU GProf i GCov. przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A Białystok

Narz«dzia do programowania w j«zyku C

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe

Podział programu na moduły

Lifehacking dla R. Przemyślenia i rozwiązania w temacie reprodukowalności analiz i organizacji pracy

Spis treści. Język interpretowany vs język kompilowany

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Podstawy Informatyki Języki programowania c.d.

Podstawy programowania

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Co nie powinno być umieszczane w plikach nagłówkowych:

Programowanie współbieżne... (10) Andrzej Baran 2010/11

Podstawy Programowania 2

Podstawy Programowania.

Mikrokontroler ATmega32. Język symboliczny

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

X P.I.W.O. Portowanie Tizena na nowe architektury na przykładzie ARMv6. Maciej Wereski Samsung R&D Institute Poland. 17 Maj Poznań, Polska

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Konsolidacja (linking)

Programowanie niskopoziomowe

Historia modeli programowania

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wprowadzenie do biblioteki klas C++

Metody Kompilacji Wykład 1 Wstęp

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Programowanie Systemów Wbudowanych. GNU Toolchain i kompilacja skrośna. GNU Toolchain. Cross-compilation KSEM WETI PG.

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Języki i metody programowania I

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

Schemat konstrukcja pliku Makefile

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja wielokrotna)

Delphi podstawy programowania. Środowisko Delphi

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie w C. dr inż. Stanisław Wszelak

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

WPROWADZENIE DO INFORMATYKI

IBM SPSS Statistics - Essentials for R: Instrukcje instalacji dla Linux

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Instrukcja laboratoryjna cz.3

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Komputery przemysłowe i systemy wbudowane

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Języki programowania obiektowego Nieobiektowe elementy języka C++

Programowanie Obiektowe i C++

Transkrypt:

Kompilacja i scalanie programów w linii poleceń gcc i make Małgorzata Stankiewicz kwiecień 2012 Małgorzata Stankiewicz () gcc i make kwiecień 2012 1 / 26

GCC - GNU Compiler Collection GCC Zestaw kompilatorów do różnych języków programowania rozwijany w ramach projektu GNU i udostępniany na licencji GPL oraz LGPL. GCC jest podstawowym kompilatorem w systemach uniksopodobnych, przy czym szczególnie ważną rolę odgrywa w procesie budowy jądra Linux. Małgorzata Stankiewicz () gcc i make kwiecień 2012 2 / 26

Zawartość GCC Zainstalowane programy: c++, cc (link to gcc), cpp, g++, gcc, gccbug, gcov Zainstalowane katalogi: /usr/include/c++, /usr/lib/gcc, /usr/share/gcc-4.6.2 Zainstalowane biblioteki: libgcc.a, libgcc eh.a, libgcc s.so, libgcov.a, libgomp.{a,so}, liblto plugin.so, libmudflap.{a,so}, libmudflapth.{a,so}, libquadmath.{a,so}, libssp.{a,so}, libssp nonshared.a, libstdc++.{a,so}, libsupc++.a Małgorzata Stankiewicz () gcc i make kwiecień 2012 3 / 26

Opis zawartości c++ Kompilator C++ Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C gccbug Skrypt powłoki wykorzystywany do ułatwionego tworzenia raportów błędów Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C gccbug Skrypt powłoki wykorzystywany do ułatwionego tworzenia raportów błędów libgcc Run-time support dla gcc Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C gccbug Skrypt powłoki wykorzystywany do ułatwionego tworzenia raportów błędów libgcc Run-time support dla gcc libssp Zawiera procedury wspierające funkcjonalności chroniące przed przepełnieniem stosu Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C gccbug Skrypt powłoki wykorzystywany do ułatwionego tworzenia raportów błędów libgcc Run-time support dla gcc libssp Zawiera procedury wspierające funkcjonalności chroniące przed przepełnieniem stosu libstdc++ Standardowa biblioteka C++ Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Opis zawartości c++ Kompilator C++ cc Kompilator C cpp Preprocesor C; wykorzystywany przez kompilator do rozwinięcia #include, #define i im podobnych w plikach źródłowych g++ Kompilator C++ gcc Kompilator C gccbug Skrypt powłoki wykorzystywany do ułatwionego tworzenia raportów błędów libgcc Run-time support dla gcc libssp Zawiera procedury wspierające funkcjonalności chroniące przed przepełnieniem stosu libstdc++ Standardowa biblioteka C++ libsupc++ Dostarcza procedury wsparcia dla języka programowania C++ Małgorzata Stankiewicz () gcc i make kwiecień 2012 4 / 26

Główne opcje gcc Małgorzata Stankiewicz () gcc i make kwiecień 2012 5 / 26

Optymalizacja i linker Małgorzata Stankiewicz () gcc i make kwiecień 2012 6 / 26

Opcje preprocesora Małgorzata Stankiewicz () gcc i make kwiecień 2012 7 / 26

W pracy gcc wyróżnić można pięć poziomów: Preprocesing - preprocesorowanie, wywołanie preprocesora Compilation - kompilacja, właściwa kompilacja Optymalization - optymalizacja kodu (opcjonalnie) Assembling - asemblacja, kompilacja z użyciem asemblera Linking - linkowanie (konsolidacja), dołącznie bibliotek Małgorzata Stankiewicz () gcc i make kwiecień 2012 8 / 26

Prekompilacja (preprocesing) Etap ten odpowiada za stworzenie ostatecznego kodu źródłowego aplikacji. Zostają dołączone pliki wskazane dyrektywą preprocesora #include, zostają wykonane podstawienia makrodefinicji stworzonych przez #define, usunięte komentarze oraz puste linie. Tworzony jest plik z rozszerzeniem zgodnym ze specyfikacją. Aby wykonać samą prekompilacje pliku źródłowego należy uruchomić gcc z przełącznikiem -E Małgorzata Stankiewicz () gcc i make kwiecień 2012 9 / 26

Kompilacja właściwa (compilation) Etap ten odpowiada za kompilacje prekompilowanego kodu źródłowego do kodu asemblera. To na tym etapie kompilator wychwytuje błędy w kodzie źródłowym i zgłasza je użytkownikowi. Tworzony jest plik asemblera z rozszerzeniem.s. Aby przerwać proces kompilacji na tym poziomie(asemblacja i linkowanie się nie odbędzie), należy uruchomić gcc z przełącznikiem -S Małgorzata Stankiewicz () gcc i make kwiecień 2012 10 / 26

Optymalizacja kodu asemblera (optymalization) Etap ten odpowiada ze wprowadzenie zmian w kodzie asemblera, które docelowo mają zwiększyć jego efektywność(zwiększyć wydajność aplikacji oraz zmniejszyć jej rozmiar). Aby tego dokonać, kompilator między innymi eliminuje nieużywane fragmenty kodu, optymalizuje przydział rejestrów, usprawnia sposób obliczania adresów względnych. Małgorzata Stankiewicz () gcc i make kwiecień 2012 11 / 26

Optymalizacja Poziom 0 - kompletnie wyłącza optymalizacje. Małgorzata Stankiewicz () gcc i make kwiecień 2012 12 / 26

Optymalizacja Poziom 0 - kompletnie wyłącza optymalizacje. Poziom 1 - prowadzi do stworzenia mniejszego i szybszego kodu bez straty dużej ilości czasu podczas kompilacji. Bardzo podstawowy poziom, często nie przynoszący widocznych efektów. Małgorzata Stankiewicz () gcc i make kwiecień 2012 12 / 26

Optymalizacja Poziom 0 - kompletnie wyłącza optymalizacje. Poziom 1 - prowadzi do stworzenia mniejszego i szybszego kodu bez straty dużej ilości czasu podczas kompilacji. Bardzo podstawowy poziom, często nie przynoszący widocznych efektów. Poziom 2 - zalecany poziom optymalizacji - kompilator będzie próbował zwiększyć wydajność kodu za cenę jego rozmiaru oraz czasu kompilacji. Małgorzata Stankiewicz () gcc i make kwiecień 2012 12 / 26

Optymalizacja Poziom 0 - kompletnie wyłącza optymalizacje. Poziom 1 - prowadzi do stworzenia mniejszego i szybszego kodu bez straty dużej ilości czasu podczas kompilacji. Bardzo podstawowy poziom, często nie przynoszący widocznych efektów. Poziom 2 - zalecany poziom optymalizacji - kompilator będzie próbował zwiększyć wydajność kodu za cenę jego rozmiaru oraz czasu kompilacji. Poziom 3 - nie zalecany dla GCC 4.x - kod będzie miał duży rozmiar, wykonanie będzie mogło wymagać więcej pamięci, a czas kompilacji mocno się wydłuży. Twórcy GCC nie zalecają używania tego poziomu optymalizacji. Małgorzata Stankiewicz () gcc i make kwiecień 2012 12 / 26

Optymalizacja Poziom 0 - kompletnie wyłącza optymalizacje. Poziom 1 - prowadzi do stworzenia mniejszego i szybszego kodu bez straty dużej ilości czasu podczas kompilacji. Bardzo podstawowy poziom, często nie przynoszący widocznych efektów. Poziom 2 - zalecany poziom optymalizacji - kompilator będzie próbował zwiększyć wydajność kodu za cenę jego rozmiaru oraz czasu kompilacji. Poziom 3 - nie zalecany dla GCC 4.x - kod będzie miał duży rozmiar, wykonanie będzie mogło wymagać więcej pamięci, a czas kompilacji mocno się wydłuży. Twórcy GCC nie zalecają używania tego poziomu optymalizacji. -Os - nacisk na zmniejszenie rozmiaru kodu + flagi optymalizacyjne jak w poziomie 2 Małgorzata Stankiewicz () gcc i make kwiecień 2012 12 / 26

Asemblacja (assembling) Na tym poziomie następuje przetworzenie kodu asemblera na kod maszynowy. Kod maszynowy(binarny) umieszczany jest w pliku obiektowym (Object file) z rozszerzeniem.o. Małgorzata Stankiewicz () gcc i make kwiecień 2012 13 / 26

Inline Assembler w C/C++ GCC umożliwia użycie asemblera w kodzie. Nie są to jednak pojedyncze instrukcje, tylko całe bloki razem ze zdefiniowanymi specjalnym systemem interfejsem między asemblerem a C/C++. Dzięki temu GCC może o wiele lepiej optymalizować kod. Małgorzata Stankiewicz () gcc i make kwiecień 2012 14 / 26

Konsolidacja, linkowanie (linking) Na tym poziomie, GCC wykonuje trzy czynności które dopełniają proces kompilacji. Linker szuka w bibliotekach systemowych lub wskazanych przez użytkownika kodu który nie został zdefiniowany w plikach źródłowych. Następnie, przypisuje kod maszynowy do ustalonych adresów. Na końcu zaś, tworzy wykonywalny plik binarny ELF(Executable and Linking File) Małgorzata Stankiewicz () gcc i make kwiecień 2012 15 / 26

MAKE make Program powłoki systemowej automatyzujący proces kompilacji programów, na które składa się wiele zależnych od siebie plików. Program przetwarza plik reguł Makefile i na tej podstawie stwierdza, które pliki źródłowe wymagają kompilacji. Zaoszczędza to wiele czasu przy tworzeniu programu, ponieważ w wyniku zmiany pliku źródłowego kompilowane są tylko te pliki, które są zależne od tego pliku. Dzięki temu nie ma potrzeby kompilacji całego projektu. Make nadaje się również do innych prac, które wymagają przetwarzania wielu plików zależnych od siebie. Małgorzata Stankiewicz () gcc i make kwiecień 2012 16 / 26

Parametry wywołania make Wywołanie programu make ma następującą postać: make [opcje] [makrodefinicje] [-f plik sterujący] [cel] W najprostszym przypadku linia polecenia zawiera tylko słowo make. Program próbuje wtedy odczytać polecenia z pliku sterującego o standardowej nazwie: m a k e f i l e, Makefile lub MakeFile. Jeśli w bieżącym katalogu nie ma pliku o takiej nazwie to zgłaszany jest błąd. Jeśli plik sterujący nosi inną nazwę to należy użyć wywołania: make -f nazwa pliku sterującego W linii wywołania można zdefiniować nowe lub zmienić istniejące już makrodefinicje, np.: make CC=gcc Można też polecić osiągnięcie innego celu niż domyślny, np.: make all, make clean lub make install Małgorzata Stankiewicz () gcc i make kwiecień 2012 17 / 26

Makefile Makefile Plik reguł dla programu make. Zawiera opis zależności pomiędzy plikami źródłowymi programu. Umożliwia to przetwarzanie tylko tych plików, które się zmieniły od ostatniej kompilacji i plików od nich zależnych. Skraca to znacznie czas generowania pliku wynikowego. Format pliku różni się w zależności od implementacji programu make, ale podstawowe reguły są takie same dla wszystkich odmian make. Małgorzata Stankiewicz () gcc i make kwiecień 2012 18 / 26

Makefile CEL: SKŁADNIKI KOMENDA CEL to nazwa pliku docelowego, który jest tworzony z plików wymienionych jako SKŁADNIKI, zaś KOMENDA podaje komendę, która tworzy plik docelowy CEL z plików składowych SKŁADNIKI Małgorzata Stankiewicz () gcc i make kwiecień 2012 19 / 26

Makefile CEL: SKŁADNIKI KOMENDA CEL to nazwa pliku docelowego, który jest tworzony z plików wymienionych jako SKŁADNIKI, zaś KOMENDA podaje komendę, która tworzy plik docelowy CEL z plików składowych SKŁADNIKI helloworld.o: helloworld.c gcc helloworld.c -o helloworld.o Małgorzata Stankiewicz () gcc i make kwiecień 2012 19 / 26

Przykładowo Program składający się z: dwóch plików źródłowych program.cpp, lib.cpp jednego nagłówkowego lib.h lib.h jest dołączany do obu plików źródłowych Małgorzata Stankiewicz () gcc i make kwiecień 2012 20 / 26

Przykładowo Program składający się z: dwóch plików źródłowych program.cpp, lib.cpp jednego nagłówkowego lib.h lib.h jest dołączany do obu plików źródłowych Ręczna kompilacja i konsolidacja tego programu wygląda tak: g++ -c -o lib.o lib.cpp - kompilacja lib.cpp g++ -c -o program.o program.cpp - kompilacja program.cpp g++ -o program program.o lib.o - konsolidacja Małgorzata Stankiewicz () gcc i make kwiecień 2012 20 / 26

Przykładowo Program składający się z: dwóch plików źródłowych program.cpp, lib.cpp jednego nagłówkowego lib.h lib.h jest dołączany do obu plików źródłowych Ręczna kompilacja i konsolidacja tego programu wygląda tak: g++ -c -o lib.o lib.cpp - kompilacja lib.cpp g++ -c -o program.o program.cpp - kompilacja program.cpp g++ -o program program.o lib.o - konsolidacja Zawartość Makefile: program: program.o lib.o g++ -o program program.o lib.o program.o: program.cpp lib.h g++ -c -o program.o program.cpp lib.o: lib.cpp lib.h g++ -c -o lib.o lib.cpp Małgorzata Stankiewicz () gcc i make kwiecień 2012 20 / 26

W pliku znajdują się 3 reguły: 1 Target program reguła dotyczy konsolidacji. Plikiem wynikowym tej reguły jest plik wykonywalny. Do utworzenia tego pliku kompilator potrzebuje plików program.o i lib.o. program: program.o lib.o g++ -o program program.o lib.o 2 Target program.o Plik program.o powstaje z pliku program.cpp z dołączonym lib.h. program.o: program.cpp lib.h g++ -c -o program.o program.cpp 3 Target lib.o Powstaje z pliku lib.cpp z dołączonym lib.h. lib.o: lib.cpp lib.h g++ -c -o lib.o lib.cpp Małgorzata Stankiewicz () gcc i make kwiecień 2012 21 / 26

Sprzątanie W pliku Makefile istnieje możliwość tworzenia targetów, które nie są nazwami plików wynikowych, a jedynie nazwami akcji do wykonania. Najpopularniejszą z takich akcji jest clean, którego zadaniem jest usunięcie wszystkich kompilatów pośrednich. Realizuje się to poprzez wpisanie w pliku Makefile następującej reguły:.phony: clean clean: rm -f *.o a następnie wpisywanie w terminalu komendy: make clean Małgorzata Stankiewicz () gcc i make kwiecień 2012 22 / 26

Wiele kompilatów Zdarza się w jednym projekcie występuje kilka plików wykonywalnych. Aby zbudować kilka binarek za pomocą jednego pliku Makefile należy zdefiniować target all i uzależnić go od wszystkich plików wykonywalnych. all: program1 program2 po wpisaniu w terminal komendy: make zbudują się wszystkie pliki. Małgorzata Stankiewicz () gcc i make kwiecień 2012 23 / 26

Zmienne w pliku Makefile W pliku Makefile można definiować zmienne: OBJS=hello.o aux.o hello: $(OBJS) gcc $(OBJS) -o hello hello.o: hello.c gcc -c hello.c -o hello.o aux.o: aux.c gcc -c aux.c -o aux.o Małgorzata Stankiewicz () gcc i make kwiecień 2012 24 / 26

Zmienne standardowe W Makefile można używać wielu zmiennych zdefiniowanych standardowo. Najczęściej używane zmienne standardowe: CC - nazwa kompilatora języka C CXX - nazwa kompilatora języka C++ CFLAGS - opcje kompilatora języka C CXXLAGS - opcje kompilatora języka C LFLAGS - opcje dla linkera Zmienne standardowe mają pewną predefiniowaną wartość (np. zmienna CC ma predefiniowaną wartość cc ), którą jednak można zmieniać. CC=gcc CFLAGS=-g OBJS=hello.o aux.o hello: $(OBJS) $(CC) $(LFLAGS) $(OBJS) -o hello hello.o: hello.c Małgorzata Stankiewicz () gcc i make kwiecień 2012 25 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia - f plik sterujący umożliwia stosowanie innych niż standardowe nazw plików sterujących Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia - f plik sterujący umożliwia stosowanie innych niż standardowe nazw plików sterujących - i powoduje ignorowanie błędów kompilacji Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia - f plik sterujący umożliwia stosowanie innych niż standardowe nazw plików sterujących - i powoduje ignorowanie błędów kompilacji - n powoduje wypisywanie poleceń na ekran zamiast ich wykonywania Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia - f plik sterujący umożliwia stosowanie innych niż standardowe nazw plików sterujących - i powoduje ignorowanie błędów kompilacji - n powoduje wypisywanie poleceń na ekran zamiast ich wykonywania - p powoduje wypisywanie makrodefinicji (zmiennych) i reguł transformacji Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26

Najczęściej używane opcje: - d włącza tryb szczegółowego śledzenia - f plik sterujący umożliwia stosowanie innych niż standardowe nazw plików sterujących - i powoduje ignorowanie błędów kompilacji - n powoduje wypisywanie poleceń na ekran zamiast ich wykonywania - p powoduje wypisywanie makrodefinicji (zmiennych) i reguł transformacji - s wyłącza wypisywanie treści polecenia przed jego wykonaniem Małgorzata Stankiewicz () gcc i make kwiecień 2012 26 / 26