Professional Documents
Culture Documents
Lp trnh C/Linux
Lp trnh C/Linux
Lp trnh C Cng c cn thit Trnh bin dch gcc Tp tin tiu Tp tin th vin hm Tin ch make Tp tin makefile Macro
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
Lp trnh C/Linux
Lp trnh C Cng c cn thit Trnh bin dch gcc Tp tin tiu Tp tin th vin hm Tin ch make Tp tin makefile Macro
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
Cng c cn thit
Trnh son tho vn bn (text):
vi, gedit, emacs, geany,...
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
Cc ty chn ca gcc
-Wall: hin th ton b cc warning -ansi: S dng C chun ANSI -o: t tn cho tp tin kt qu bin dch -c: To cc tp tin i tng, khng lin kt -lm: Lin kt vi th vin ton, nu trong chng trnh c #include math.h
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
V d v gcc
gcc -o hello hello.c
T ra tp tin thc thi hello
Lp trnh C/Linux
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
Lp trnh C/Linux
Tp tin th vin hm
Cha cc hm c bin dch trc c th c s dng li bi cc chng trnh C khc m khng cn phi vit li Cc tp tin th vin hm chun ca h thng Linux c lu trong th mc /lib hoc /usr/lib Qui tc t tn:
Th vin tnh (static librabry): libIndicat.a Th vin chia s (shared librabry): libIndicat.so libc.a - Th vin hm C; libm.a - Th vin v ton
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
10
Lp trnh C/Linux
S dng th vin hm
M t ng dn n tp tin th vin hm
gcc -o myprog myprog.c /usr/lib/libm.a
Dng ty chn -L b sung th mc cha th vin hm: gcc -o myprog -L/usr/openwin/lib myprog.c -lX11
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
11
Lp trnh C/Linux
// File name: helloworld.c #include "mylib.h" int main() { hello("Hung"); bonjour("Hung"); return 0; } gcc -c *.c ls *.o bonjour.o hello.o helloworld.o gcc -o helloworld hello.o bonjour.o helloworld.o ./helloworld Hello Hung Bonjour Hung
Ng B Hng - http://sites.google.com/site/nbhung
12
Lp trnh C/Linux
S dng th vin
gcc -o helloworld helloworld.o libmylib.a Hoc gcc -o helloworld helloworld.o -L. -lmylib
13
Lp trnh C/Linux
Th vin hm chia s
Khc phc hn ch ca th vin hm tnh: cng mt hm nhng xut hin nhiu ni trong b nh my tnh khi c nhiu tin trnh cng tham kho n hm lm lng ph b nh Chng trnh s dng hm ca th vin hm chia s khng cha m code ca hm m cha m tham kho n hm Tin ch ldd: cho bit th vin chia s no cn bi mt chng trnh
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
14
Lp trnh C/Linux
Lp trnh C/Linux
Lp trnh C Cng c cn thit Trnh bin dch gcc Tp tin tiu Tp tin th vin hm Tin ch make Tp tin makefile Macro
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
15
Lp trnh C/Linux
16
Lp trnh C/Linux
Tp tin m t
C tn mc nhin l makefile/Makefile c dng ch dn make cch thc bin dch/bin dch li mt cch t ng mt chng trnh; bao gm:
Cc mc tiu (targets): thng l cc tp tin thc thi hoc cc tp tin m i tng cn to ra Nhng s ph thuc (dependencies ) ch ra s ph thuc ca mt mc tiu vo cc tp tin khc Cc lut (rules) ch ra cch thc to ra cc mc tiu
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
17
Lp trnh C/Linux
18
Lp trnh C/Linux
M ngun ca mt ng dng
include a.h use prog1.c main.c
include include
use
b.h
c.h
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
19
Lp trnh C/Linux
20
Lp trnh C/Linux
21
Lp trnh C/Linux
22
Lp trnh C/Linux
23
Lp trnh C/Linux
C php ca make
make
S dng tp tin makefile hoc Makefile trong th mc hin hnh nh tp tin m t To mc tiu u tin trong tp tin m t
make -f MyMakeFile
S dng tp tin MyMakeFile nh tp tin m t
make target-name
To mc tiu target-name trong tp tin m t Mc tiu all thng c nh ngha bao gm tt c cc mc tiu
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
24
Lp trnh C/Linux
MACRONAME=Value
25
Lp trnh C/Linux
all: myapp # Which compiler CC = gcc # Where are include files kept INCLUDE = . # Options for development CFLAGS = -g -Wall -ansi # Options for release # CFLAGS = -O -Wall -ansi myapp: main.o prog1.o prog2.o
$(CC) -o myapp main.o prog1.o prog2.o main.o: main.c a.h $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c prog1.o: prog1.c a.h b.h $(CC) -I$(INCLUDE) $(CFLAGS) -c prog1.c prog2.o: prog2.c b.h c.h $(CC) -I$(INCLUDE) $(CFLAGS) -c prog2.c
22/10/2010 Ng B Hng - http://sites.google.com/site/nbhung
26
Lp trnh C/Linux
27
Lp trnh C/Linux
all: myapp CC = gcc # Where to install INSTDIR = /usr/local/bin # Where are include files kept INCLUDE = . # Options for development CFLAGS = -g -Wall -ansi # Options for release # CFLAGS = -O -Wall -ansi
myapp: main.o prog1.o prog2.o $(CC) -o myapp main.o prog1.o prog2.o main.o: main.c a.h $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c prog1.o: prog1.c a.h b.h $(CC) -I$(INCLUDE) $(CFLAGS) -c prog1.c prog2.o: prog2.c b.h c.h $(CC) -I$(INCLUDE) $(CFLAGS) -c prog2.c
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
28
Lp trnh C/Linux
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
29
Lp trnh C/Linux
Suffix and Pattern Rules Managing Libraries with make Makefiles and Subdirectories
22/10/2010
Ng B Hng - http://sites.google.com/site/nbhung
30