rucki, materiały PWr, W11 - PPT
[ Pobierz całość w formacie PDF ]
1. Wprowadzenie (2006/2007) Tworzenie oprogramowania • Język C • Budowa programu napisanego w języku C • podział na pliki z definicjami funkcji, • korzystanie z bibliotek systemowych i własnych • automatyzacja kompilacji za pomocą make • dzielenie projektu na części: katalogi zawierające pliki źródłowe, pliki nagłówkowe, pliki wykonywalne, pliki biblioteczne • Narzędzia programisty w środowisku GNU/Linux • edytory (vi, vim, mcedit, emacs,kwrite, kate, anjuta, ...) • kompilator: gcc • inne użyteczne narzędzia: o przeszukiwanie dokumentacji (man, apropos, whatis, info, pinfo, GNOME yelp, ...) o wyszukiwanie tekstu (grep i wyrażenia regularne) o porównywanie plików (diff, patch) o automatyczne tworzenie dokumentacji: (doxygene, upiększcze kodu – indent, ...) o debuger (gdb – tekstowy, trzeba odpowiednio skompilować program, graficzne: kdbg, ddd, ...) 1 1. Wprowadzenie (2006/2007) Podręcznik systemowy – polecenie man • Sekcje • 2 – system calls • 3 – libraries • 4 – special, device, files (np. /dev/random , /dev/urandom ) • 5 – file formats • Użyteczne polecenia $ whereis printf printf: /usr/bin/printf /usr/include/printf.h /usr/share/man/man1/printf.1.gz /usr/share/man/man3/printf.3.gz /usr/share/man/man1p/printf.1p.gz /usr/share/man/man3p/printf.3p.gz $ man 3 printf PRINTF(3) Linux Programmer's Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion SYNOPSIS #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...); ... DESCRIPTION The functions in the printf family produce output according to a format as described below. The functions printf and vprintf write output to stdout, the standard output stream; fprintf and vfprintf write output to the given output stream; sprintf, snprintf, vsprintf and vsnprintf write to the character string str. $ whatis printf printf (1) - format and print data printf (3) - formatted output conversion printf [builtins] (1) - bash built-in commands, see bash(1) $ apropos printf fprintf [printf] (3) - formatted output conversion printf (1) - format and print data printf (3) - formatted output conversion printf [builtins] (1) - bash built-in commands, see bash(1) snprintf [printf] (3) - formatted output conversion sprintf [printf] (3) - formatted output conversion ... $ info printf $ info --apropos printf 2 1. Wprowadzenie (2006/2007) Kompilacja programu • Kompilator gcc Przykład wywołania: $ gcc file1.c file2.c file3.c –o prog • Pełny opis opcji: man gcc • Ważniejsze opcje kompilatora gcc • -o filename : określa nazwę pliku wynikowego, zawierającego program gotowy do wykonania • -c : kompiluj tylko do postaci obiektów (.o), nie łącz • -D symbol : definiuj symbol w preprocesorze • -I path : gdzie szukać plików nagłówkowych (domyślnie – aktualny katalog i katalogi standardowych bibliotek) • -L path : określa dodatkowy katalog przeglądany w poszukiwaniu bibliotek • -l libname : określa dołączane biblioteki (np. –lm oznacza bibliotekę libm.so lub libm.a , w takiej kolejności) • -static : dołączaj tylko biblioteki statyczne • -O n : określa stopień optymalizacji kodu wynikowego • -pedantic : : wyświetl wszystkie ostrzeżenia i błędy wymagane przez standard ANSI • -Wall : włącz wszystkie użyteczne ostrzeżenia • -v : wyświetl komunikaty o przebiegu kompilacji • -std : określa używany standard języka C (np. C99 ) 3 1. Wprowadzenie (2006/2007) Kompilacja programu za pomocą make • Zasada: plik Makefile zawiera cele (ang. targets ), które chcemy osiągnąć i reguły (ang. rules ) wyjaśniające jak to zrobić. Definiuje się również zależności (ang. dependents , prerequisities ), określające kiedy należy ponownie zbudować dany cel. • Przykład 1 $ cat p1.c #include <stdio.h> int main() { printf("Witaj\n"); return 0; } $ cat Makefile p1: p1.c gcc -Wall p1.c -o p1 $ make gcc -Wall p1.c -o p1 $ ./p1 Witaj • Przykład 2 CC=gcc CFLAGS=-Wall -O2 SOURCES=p1.c OUTFILE=p1 all: $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) • Przykład 3 CC=gcc CFLAGS=-Wall -O2 -lm SOURCES=p1.c funkcje.c OUTFILE=p1 all: $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) • Przykład 4 CC=gcc CFLAGS=-Wall -O2 SOURCES=prog1.c mylib1.c OUTFILE=prog1 SRCDIR=./src INCDIR=./include LDFLAGS= -lm all: $(CC) $(CFLAGS) $(SRCDIR)/$(SOURCES) $(LDFLAGS) -I$(INCDIR) \ -o $(OUTFILE) 4 1. Wprowadzenie (2006/2007) • Przykład 5 $ ls -R . .: include Makefile src ./include: func.h ./src: func.c main.c $ cat Makefile CC=gcc CFLAGS=-Wall -O2 SOURCES=main.c func.c #to po prostu main.o func.o, tylko krócej OBJECTS=$(SOURCES:.c=.o) OUTFILE=prog1 SRCDIR=./src INCDIR=./include LDFLAGS= -lm all: $(OBJECTS) $(CC) $(LDFLAGS) -o $(OUTFILE) $(OBJECTS) main.o: $(CC) -c $(CFLAGS) -I$(INCDIR) $(SRCDIR)/main.c func.o: $(CC) -c $(CFLAGS) -I$(INCDIR) $(SRCDIR)/func.c clean: rm -f $(OBJECTS) $(OUTFILE) $ make gcc -c -Wall -O2 -I./include ./src/main.c gcc -c -Wall -O2 -I./include ./src/func.c gcc -lm -o prog1 main.o func.o $ make clean rm -f main.o func.o prog1 5 [ Pobierz całość w formacie PDF ] |