Programowanie Proceduralne



Podobne dokumenty
Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

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

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Tworzenie oprogramowania

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

Podstawy Programowania.

Fragment wykładu z języka C ( )

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!

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

Wstęp do Programowania, laboratorium 02

7. Pętle for. Przykłady

Podstawy Programowania

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

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

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

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

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

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

Poprzedni wykład [ ] :

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

Programowanie Obiektowe i C++

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wstęp do Programowania 2

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Wstęp do programowania

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

Podstawy programowania - 1

Podstawy programowania skrót z wykładów:

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

1 Podstawy c++ w pigułce.

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

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

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

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

2 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania C. dr. Krystyna Łapin

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

1. Wprowadzenie do C/C++

Podstawy Programowania

dr inż. Jarosław Forenc

Podstawy programowania (1)

Proste algorytmy w języku C

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Tworzenie oprogramowania

Język C - podstawowe informacje

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

1. Wprowadzenie do C/C++

Programowanie strukturalne i obiektowe

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

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

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

1 Podstawy c++ w pigułce.

Wskaźniki w C. Anna Gogolińska

Tworzenie oprogramowania

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Zmienne, stałe i operatory

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

Wstęp. do języka C na procesor (kompilator RC51)

3. Instrukcje warunkowe

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Zadanie 2: Arytmetyka symboli

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

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

Wstęp do programowania. Wykład 1

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

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

Warsztaty dla nauczycieli

Programowanie w języku Python. Grażyna Koba

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

!"# %!*%+,-.! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Wykład 1

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

Wstęp do wskaźników w języku ANSI C

Stałe, tablice dynamiczne i wielowymiarowe

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

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

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

Programowanie mikrokontrolerów AVR

Inżynieria Wytwarzania Systemów Wbudowanych

Pytania sprawdzające wiedzę z programowania C++

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

Podstawy informatyki

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Wstęp do informatyki- wykład 11 Funkcje

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

KONSTRUKCJA KOMPILATORÓW

Transkrypt:

Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14

Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest głównie do kompilacji, badź rekompilacji złożonych projektów, ale nie tylko. Makefile zawiera zbiór zależności między plikami źródłowymi. Dzięki temu otrzymujemy możliwość kompilacji tylko poszczególnych plików, czyli tych które się zmieniły od czasu ostatniej kompilacji. Możliwość ta znacznie skraca czas generowania pliku wynikowego. W zależności od złożoności danego projektu, badź specyficznych wymagań, możemy posiadać dowolna ilość takich plików. Ogólnie przyjęta zasada mówi o tym, aby główny plik posiadał jedna z trzech nazw, GNUmakefile, makefile lub Makefile.

Szkielet budowy pliku Typowy plik Makefile zawiera pięć podstawowych elementów: reguły szczegółowe reguły ogólne definicje zmiennych dyrektywy komentarze

Szkielet budowy pliku Reguły szczegółowe Reguły szczegółowe opisuja zasadę rekompilacji jednego badź więcej plików, nazywanych celami. Do osiagnięcia celu potrzebujemy listy plików, tzw. zależności. Reguły szczegółowe dotycza pliku wynikowego, jaki mamy otrzymać po zakończeniu działania polecenia make. Cel : zależności Instrukcje Instrukcje Cel to najczęściej nazwa pliku wynikowego, może to być też nazwa akcji np. clean. Zależności to nazwy plików wymagane do otrzymania pliku wynikowego. Instrukcje to blok instrukcji, po wykonaniu którego otrzymamy cel. Uwaga! Każda instrukcja rozpoczyna się od tabulatora.

Szkielet budowy pliku Reguły ogólne Reguły ogólne mówia o kompilacji plików tzw. pośrednich. Charakteryzuja się tym, iż nazwa celu zazwyczaj jest identyczna z nazwa pliku, który trzeba skompilować, aby otrzymać plik pośredni. Definicje zmiennych Definicje zmiennych znacznie upraszczaja budowę plików oraz wprowadzają wyższy poziom organizacji. Dyrektywy to nic innego jak polecenie, badź zbiór poleceń, które ma wykonać make w konkretnym przypadku. Każda linia zaczynaj aca się od # jest traktowana jako komentarz.

Oto bardzo prosty plik Makefile, którego zadaniem jest kompilacja program w języku C z podstawowymi opcjami kompilacji. Example program: plik.c gcc -Wall -std=c99 plik.c -o program program to plik wynikowy jaki otrzymamy po kompilacji plik.c to plik, którego potrzebujemy do procesu kompilacji instrukcja uruchamia kompilator wraz z zadanymi opcjami kompilacji

main.c #include <stdio.h> #include "functions.h" int main(void){ print_hello(); printf("\n"); printf("the factorial of 5 is %d",factorial(5)); return 0; } hello.c #include <stdio.h> #include "functions.h" void print_hello(){ puts("hello World!"); }

factorial.c #include "functions.h" int factorial(int n){ if(n!=1)return(n * factorial(n-1)); else return 1; } functions.h #ifndef FUNCTIONS_H #define FUNCTIONS_H void print_hello(); int factorial(int n); #endif Szkielet programu all: gcc main.c hello.c factorial.c -o hello

Makefile all: hello hello: main.o factorial.o hello.o gcc main.o factorial.o hello.o -o hello main.o: main.c gcc -c main.c factorial.o: factorial.c gcc -c factorial.c hello.o: hello.c gcc -c hello.c clean: rm -rf *o hello

Nadawanie wartości zmiennym Istnieje wiele możliwości nadawania zmiennym wartości. Pierwsza polega na zazsosowaniu znaku =. Druga natomiast polega na zdefiniowaniu zmiennej w bloku define. Wartościa zmiennej może być inna zmienna. Example pierwsza = $(druga) druga = $(trzecia) trzecia = zmienna all: ; echo $(pierwsza)

Nadawanie wartości zmiennym Makefile # I am a comment, and I want to say that the variable CC # will be the compiler to use. CC=gcc CFLAGS = -c -Wall CFLAGS2 = -std=c99 -Wall all: hello hello: main.o factorial.o hello.o $(CC) $(CFLAGS2) main.o factorial.o hello.o -o hello main.o: main.c $(CC) $(CFLAGS) main.c factorial.o: factorial.c $(CC) $(CFLAGS) factorial.c hello.o: hello.c $(CC) $(CFLAGS) hello.c clean: rm -rf *o hello

Nadawanie wartości zmiennym Przykład na nieskończoną pętlę: CFLAGS = $(CFLAGS) -o Aby uniknać powyższego problemu można skorzystać z operatora := zamiast =. Skutkuje to rozszerzeniem zmiennej o wartość zmiennej która dodajemy. Działa to na zasadzie rozszerzenia tekstowego. Przykład: Example x:= nowy y:= $x tekst x:= inny tekst Powyższy zapis jest równoważny z: Example y= nowy tekst x:= inny tekst

Nadanie wartości niezainicjalizowanej zmiennej Sa sytuacje, w których chcemy nadać wartość zmiennej, tylko jeśli ta jeszcze nie została zainicjalizowana. Wtedy, zamiast zwykłego operatora przypisania = używamy?=. Wykorzystanie tego operatora gwarantuje, iż wartość zmiennej nie zostanie nadpisana. Przykładowo, instrukcja: Example zmienna?= object.c spowoduje przypisanie do zmiennej zmienna wartości object.c w przypadku jeśli zmienna nie jest zainicjalizowana. Jeśli natomiast inicjalizacja nastapiła gdzieś we wcześniejszej części pliku Makefile, przypisanie zostanie pominięte.

Dodawanie tekstu do zmiennej Operator += przydatny jest np. w przypadku kiedy do istniejacej listy plików chcemy dodać jeszcze jeden element. Przykład: Example objects = plik1.c plik2.c plik3.c objects += plik4.c Po wykonaniu tych instrukcji zmienna objects będzie zawierała następujace elementy: plik1.c plik2.c plik3.c plik4.c. Użycie operatora += jest równoważne zapisowi: Example objects = plik1.c plik2.c plik3.c objects := $(objects) plik4.c

Poniższy przykład instrukcji warunkowej wskazuje poleceniu make odpowiedni zestaw bibliotek w zależności od tego jak ustawiona jest zmienna CC. Jeśli zmienna CC=gcc, to do polecenia kompilacji zostanie dodany przełacznik -lgnu. Example libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif

Dyrektywa ifeq zawiera oraz odpowiada za porównanie warunku. Argumenty oddzielone sa przecinkiem oraz otoczone nawiasami okragłymi. Kolejna linia po ifeq zostanie wykonana tylko w przypadku, gdy obydwa argumenty porównania sa równe. Dyrektywa else jest opcjonalna i tylko wykonywana w przypadku kiedy warunek w dyrektywie Ifeq nie jest prawdziwy. Dyrektywa endif stosowana jest do wyraźnego zakończenia sekcji warunkowej każdy blok warunkowy musi być zakończony ta dyrektywa.