Automatyzacja kompilacji. Automatyzacja kompilacji 1/28



Podobne dokumenty
Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Programowanie Proceduralne

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

Tworzenie oprogramowania

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

Zbuduj mi ten projekt, prosz.

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

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

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

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

Tworzenie oprogramowania

Fragment wykładu z języka C ( )

Plan wykładów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 1. Konkurs programistyczny. Literatura. Dr inż. Tomasz Olas

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

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!

Praktyka programowania projekt

Tworzenie oprogramowania

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

Poprzedni wykład [ ] :

Programy użytkowe (utilities)

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

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

PRZEWODNIK PO PRZEDMIOCIE

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 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

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

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

Pracownia specjalistyczna. Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka

Systemy Operacyjne. Ćwiczenia

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

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

Programowanie Obiektowe i C++

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

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

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

#line #endif #ifndef #pragma

Programowanie w języku Python. Grażyna Koba

Programowanie Obiektowe i C++

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

Podstawy Programowania.

1 Zapoznanie się ze środowiskiem Xenomai.

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

Wykład 4: Klasy i Metody

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

Jak (bezboleśnie) wrócić do kodowania na Amigę? Krystian Bacławski 8 czerwca 2013

- nawiasy kwadratowe oznaczają, że to lista

1. Kompilacja i uruchamianie programów

Wstęp do programowania. Wykład 1

WPROWADZENIE. Programowanie Obiektowe Mateusz Cicheński

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Wstęp do Programowania, laboratorium 02

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

Programowanie strukturalne i obiektowe

MentorGraphics ModelSim

Wstęp do programowania

Język C - podstawowe informacje

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Języki skryptowe w programie Plans

Zofia Kruczkiewicz, ETE8305_2 1

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Programowanie niskopoziomowe

Podstawy Programowania

Zajęcia z Unix-a cz 1 kompilacja GCC.

Wykład 1

Bardzo krótki kurs Perla

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

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

Klasy abstrakcyjne i interfejsy

Paradygmaty programowania

Wykład 8: klasy cz. 4

Podstawy informatyki

Programowanie mikrokontrolerów AVR

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Programowanie Obiektowe i C++

Język programowania PASCAL

Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++

Wprowadzenie do biblioteki klas C++

Programowanie obiektowe

Konsolidacja (linking)

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

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Wykład 9: Polimorfizm i klasy wirtualne

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

3 Przygotował: mgr inż. Maciej Lasota

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Podstawy programowania - 1

Szablony funkcji i klas (templates)

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Bloki anonimowe w PL/SQL

Programowanie obiektowe

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Transkrypt:

Automatyzacja kompilacji Automatyzacja kompilacji 1/28

Automatyzacja kompilacji 2/28 Wstęp Polecenia kompilacji gcc -Wall -c komunikat.c -o komunikat.o gcc -Wall -c main.c -o main.o gcc -Wall -c test.c -o test.o gcc -lm komunikat.o main.o test.o -o program

Automatyzacja kompilacji 3/28 Polecenia kompilacji Prosta automatyzacja for f in *.c; do gcc -Wall -c $f -o ${f%c}o done gcc -lm *.o -o program

Automatyzacja kompilacji 4/28 Pierwszy makefile Reguła: cel: zależności polecenie gdzie cel nazwa pliku, który ma powstać z tej reguły zależności lista plików, od których zależy cel, tzn. zmiana któregokolwiek z tych plików oznacza, że cel też się zmieni, polecenie jest to polecenie, za pomocą którego ma zostać wytworzony cel.

Automatyzacja kompilacji 5/28 Pierwszy makefile Przykładowa reguła: komunikat.o: komunikat.c komunikat.h gcc -Wall -c komunikat.c -o komunikat.o Zależności gcc -MM plik.c

Automatyzacja kompilacji 6/28 Pierwszy makefile Przykładowy makefile program: komunikat.o main.o test.o gcc -lm komunikat.o main.o test.o -o program komunikat.o: komunikat.c komunikat.h gcc -Wall -c komunikat.c -o komunikat.o main.o: main.c test.h gcc -Wall -c main.c -o main.o test.o: test.c test.h komunikat.h gcc -Wall -c test.c -o test.o

Automatyzacja kompilacji 7/28 Wykorzystanie makefile Wywołanie Jeśli plik z regułami nazywa się Makefile $ make gcc -Wall -c komunikat.c -o komunikat.o gcc -Wall -c main.c -o main.o gcc -Wall -c test.c -o test.o gcc -lm komunikat.o main.o test.o -o program W innym przypadku $ make -f nazwa_pliku

Automatyzacja kompilacji 8/28 Reguły jak polecenia program: komunikat.o main.o test.o gcc -lm komunikat.o main.o test.o -o program komunikat.o: komunikat.c komunikat.h gcc -Wall -c komunikat.c -o komunikat.o main.o: main.c test.h gcc -Wall -c main.c -o main.o test.o: test.c test.h komunikat.h gcc -Wall -c test.c -o test.o clean: rm -f program komunikat.o main.o test.o

Automatyzacja kompilacji 9/28 Reguły jak polecenia program: komunikat.o main.o test.o gcc -lm komunikat.o main.o test.o -o program komunikat.o: komunikat.c komunikat.h gcc -Wall -c komunikat.c -o komunikat.o main.o: main.c test.h gcc -Wall -c main.c -o main.o test.o: test.c test.h komunikat.h gcc -Wall -c test.c -o test.o.phony: clean clean: rm -f program komunikat.o main.o test.o

Automatyzacja kompilacji 10/28 Zmienne i funkcje Zmienne objects=komunikat.o main.o test.o program: $(objects) gcc -lm $(objects) -o program komunikat.o: komunikat.c komunikat.h gcc -Wall -c komunikat.c -o komunikat.o main.o: main.c test.h gcc -Wall -c main.c -o main.o test.o: test.c test.h komunikat.h gcc -Wall -c test.c -o test.o.phony: clean clean: rm -f program $(objects)

Automatyzacja kompilacji 11/28 Zmienne i funkcje Wbudowane funkcje sources=komunikat.c main.c test.c objects=$(patsubst %.c,%.o,$(sources)) $(patsubst wz_wejściowy,wz_wynikowy,lista_wyrazów) objects=$(sources:.c=.o) sources=$(wildcard *.c)

Automatyzacja kompilacji 12/28 Zmienne automatyczne $@ nazwa pliku docelowego $< nazwa pierwszego pliku pełniącego funkcję wymagania wstępnego w danej regule $^ nazwy wszystkich plików pełniących funkcje wymagań wstępnych, bez powtórzeń $+ nazwy wszystkich plików pełniących funkcje wymagań wstępnych, z powtórzeniami $? nazwy plików pełniących funkcje wymagań wstępnych, nowszych od pliku docelowego $* w przypadku reguły przyrostkowej nazwa pliku docelowego, bez rozszerzenia

Automatyzacja kompilacji 13/28 Zmienne automatyczne wykorzystanie sources=komunikat.c main.c test.c objects=$(sources:.c=.o) program: $(objects) gcc -lm $^ -o $@ komunikat.o: komunikat.c komunikat.h gcc -Wall -c $< -o $@ main.o: main.c test.h gcc -Wall -c $< -o $@ test.o: test.c test.h komunikat.h gcc -Wall -c $< -o $@.PHONY: clean clean: rm -f program $(objects)

Automatyzacja kompilacji 14/28 Reguły wzorców Deklarowanie reguły wzorca %.o: %.c gcc -Wall -c $< -o $@ Reguła przyrostkowa.suffixes=.cxx.cxx.o: g++ -Wall -c $< -o $@

Automatyzacja kompilacji 15/28 Przykład użycia reguły wzorca sources=komunikat.c main.c test.c objects=$(sources:.c=.o) program: $(objects) gcc -lm $^ -o $@ komunikat.o: komunikat.c komunikat.h main.o: main.c test.h test.o: test.c test.h komunikat.h %.o: %.c gcc -Wall -c $< -o $@.PHONY: clean clean: rm -f program $(objects)

Automatyzacja kompilacji 16/28 Użycie wbudowanych reguł wzorców sources=komunikat.c main.c test.c objects=$(sources:.c=.o) program: $(objects) gcc -lm $^ -o $@ komunikat.o: komunikat.c komunikat.h main.o: main.c test.h test.o: test.c test.h komunikat.h.phony: clean clean: rm -f program $(objects)

Automatyzacja kompilacji 17/28 Wbudowane reguły Poprzednio wykorzystano regułę %.o: %.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< Można ją modyfikować definiując zmienne CC=gcc CFLAGS=-Wall

Automatyzacja kompilacji 18/28 Typowe zmienne wykorzystywane w regułach niejawnych Zmienna Wartość domyślna Opis CC gcc Kompilator języka C CXX g++ Kompilator języka C++ CFLAGS pusta Flagi przekazywane do kompilatora C CXXFLAGS pusta Flagi przekazywane do kompilatora C++ CPPFLAGS pusta Flagi przekazywane do preprocesora C

Automatyzacja kompilacji 19/28 Domyślne reguły przyrostkowe Język Rozszerzenia Polecenie C.c $(CC) -c $(CPPFLAGS) $(CFLAGS) C++.cpp,.cc,.C $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) Asembler.s $(AS) $(ASLAGS) Asembler.S $(CPP) $(CPPLAGS) Pascal.p $(PC) -c $(PFLAGS) Fortran.f $(FC) -c $(FFLAGS) Fortran.F $(FC) -c $(FFLAGS) &(CPPFLAGS)

Automatyzacja kompilacji 20/28 Konstrukcje warunkowe Konstrukcja ifeq ifneq ifdef ifndef Znaczenie Sprawdza, czy dwie wartości są sobie równe Sprawdza, czy dwie wartości są od siebie różne Sprawdza, czy zdefiniowano daną zmienną Sprawdza, czy nie zdefiniowano danej zmiennej

Automatyzacja kompilacji 21/28 Konstrukcje warunkowe Przykład konstrukcji if ifeq ($(shell uname -o), "GNU/Linux") CPPFLAGS += -DLINUX else CPPFLAGS += -DOS_UNKNOWN endif

Automatyzacja kompilacji 22/28 Konstrukcje warunkowe Testowanie definicji zmiennych ifdef debug CFLAGS += -g else CFLAGS += -O2 endif Wywołanie $ make debug=1

Automatyzacja kompilacji 23/28 Narzędzia alternatywne do make Cons SCons ant nm imake CMake

Automatyzacja kompilacji 24/28 Wykorzystanie SCons Najprostszy przykład Zawartość pliku SConstruct: Program( hello.c ) Program hello powstaje na podstawie pliku hello.c, przy pomocy kompilatora C. Tworzenie plików obiektowych: Object( hello.c ) Tworzenie biblioteki: Library( hello.c )

Automatyzacja kompilacji 25/28 Instrukcje SCons Podawanie nazwy celu Program( new_hello, hello.c ) Cel zależy od wielu źródeł Program( new_program, [ prog.c, file1.c, file2.c ]) lub Program( new_program, Glob( *.c ))

Automatyzacja kompilacji 26/28 Wykorzystanie bibliotek Library( foo, [ f1.c, f2.c, f3.c ]) Program( prog.c, LIBS=[ foo, bar ], LIBPATH=. ) Program( prog.c, LIBS = m, LIBPATH = [ /usr/lib, /usr/local/lib ])

Automatyzacja kompilacji 27/28 Zależności Domyślnie wykorzystywana jest suma MD5 Decider( MD5 ) Zachowanie takie jak make Decider( timestamp-newer ) Oraz połączenie obu Decider( MD5-timestamp )

Automatyzacja kompilacji 28/28 W wykładzie wykorzystano materiały Środowisko programisty, http://mediawiki.ilab.pl/index.php/%c5%9arodowisko programisty J. Fusco, Linux. Niezbędnik programisty, Helion, 2009