Professional Documents
Culture Documents
V i nh ng ng i quen s d ng h i u hnh Windows c a Microsoft nh chng em th Linux v ph n m m m ngu n m th t s l m t mn h c m i, l v cng khng km ph n th v . Qua mn h c ny, chng em c bi t v hi u thm v th gi i m ngu n m - m t mi tr ng chia s nh ng ph n m m hon ton mi n ph theo nh ng quy nh c a ring n. V c bi t, chng em c bi t n nh ng h i u hnh khc ngoi Windows nh Ubuntu, Fedora.... V c c nh ng ki n th c , chng em mu n g i l i c m n chn thnh n gi ng vin Trng Di u Linh t n tnh ch d y, a chng em n g n hn v i 1 lnh v c hon ton m i, gip chng em c thm nh ng ki n th c n n t ng c th pht tri n ti p trong tng lai.
L i ni u
L sinh vin ngnh cng ngh thng tin, cng vi c l p trnh qu quen thu c v i chng em. Tuy nhin, t tr c n nay, r t nhi u b n v c chng em m i ch bi t n vi c th c hi n cng vi c ny trong mi tr ng h i u hnh Windows c a Microsoft. V y nn, khi c ti p c n v i cc h i u hnh khc (Unix-like) qua mn h c Linux v ph n m m m ngu n m , m t cu h i lun c chng em t ra l: c th l p trnh cc ngn ng ph bi n (nh C, C++, Java, . . . ) trn c hay khng? V l , chng em tm hi u ti: Mi tr ng l p trnh C/C++ trong Linux Makefile v L p trnh ng d ng trong bi t p l n c a mn h c. V b n bo co d i y l l i gi i p cho cu h i pha trn.
Tm t t n i dung
Nh nh c n trong l i ni u, trong bo co ny, chng em th c hi n ti: Tm hi u mi tr ng l p trnh C/C++ trong Linux - Makefile v L p trnh ng d ng. N i dung cng vi c c trnh by l i qua 3 ph n sau:
Ph n 2: Th vi n trong Linux
Ph n ny ni v cc th vi n h tr l p trnh C/C++ trong Linux.
Ph n 3: Makefile
Ph n ny trnh by v khi ni m, ngha v cch t o ra m t Makefile. Xen k l cc v d minh h a v cc tnh nng c a Makefile. Sau y l n i dung chi ti t.
M cl c
1. Mi tr ng l p trnh C/C++ trong Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Cc trnh so n th o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Trnh so n th o vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. Trnh so n th o pico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3. Trnh so n th o Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Trnh bin d ch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. M t s IDE h tr l p trnh C/C++ trong Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Code::Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2. Netbeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1 1 3 4 5 5 6 7
2. Th vi n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1. Th vi n tnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. c i m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. T o th vi n lin k t tnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3. S d ng th vi n lin k t tnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Th vi n chia s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Th vi n lin k t ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1. c i m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2. T o th vi n lin k t ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3. S d ng th vi n lin k t ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Cc cng c cho th vi n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
11 11 11 12 13 13 13 13 14 14
3. Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1. Bin d ch theo ch dng l nh - Bin d ch c b n . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Bin d ch s d ng Make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15 18
4. Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. K t lu n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 22
iii
1.1. Cc trnh so n th o
Trong Unix cng nh Unix-like, c r t nhi u trnh so n th o, c th k ra nh: vi, pico, Emacs, gedit, . . . . Cc chng trnh so n th o ny c th c ci t r t d dng, tng t nh cc ph n m m khc b ng cu l nh sudo apt-get install x v i x l tn c a trnh so n th o m ta mu n ci. Ta cng c th ki m tra xem, trnh so n th o c ci cha b ng cch g l nh: which x cng v i x l tn c a chng trnh ta mu n ki m tra s t n t i c a n. N u k t qu tr v l ng d n n ni ch a n ngha l n c ci t v ng c l i. Khi cc trnh so n th o c ci t, ta hon ton c th s d ng chng t o ra cc file m ngu n C/C++, v i ch ph n m r ng s l .c ho c .cpp. Sau y, chng em s gi i thi u v cc trnh so n th o, giao di n v cch lm vi c v i chng. 1.1.1. Trnh so n th o vi
hi n trn bn phm m khng c b t c s can thi p no t con chu t, do tng i kh dng v i nh ng ng i quen s d ng giao di n h a.
Trong c a s
o ring.
lm vi c c a vi, c ba ch . M i m t ch c m t ch c nng ch
Ch l nh: vo ch ny, ta n phm Esc. Trong ch ny, ta thao tc cc ch c nng: di chuy n con tr chu t, xa m t k t ho c c dng k t . D i y l m t s phm l nh thng d ng:
* S d ng cc phm mi tn ho c * phm l ho c space: di chuy n ti n ln 1 k t * phm h ho c backspace: di chuy n li v 1 k t * phm j : di chuy n xu ng m t dng * phm k ho c -: di chuy n ln m t dng * phm x: xa 1 k t * phm dd: xa ton b dng * g phm i: chn l nh vo bn tri con tr * phm a: chn l nh vo bn ph i con tr * phm R: thay th o n l nh khi b n g * phm o: chn m t dng tr ng sau dng hi n t i * phm O: chn m t dng tr ng trn dng hi n t i
Trong ch ny: ta th c hi n thao tc so n th o, s a ch a n i dung. Ch dng: vo ch ny, ta g k t : Ch ny lm vi c tng t nh menu File trong cc c a s Windows, v i cc phm ch c nng nh sau: ng d ng trn
* :q - thot kh i chng trnh v lu l i m i s thay i. * :q! - thot kh i chng trnh m khng c b t c s thay i no. * :w - lu l i thay i. Phm ny cng th c hi n ch c nng lu file v t
tn cho file, b ng cch g: 2
:w <ten_file.phan_mo_rong>
vi ho c m m t file c s n: vi <ten_file.phan_mo_rong> v g phm enter, c a s lm vi c c a vi s hi n ln. Khi , b t u so n th o, ta n phm a <enter> vo ch nh p. Giao di n lm vi c c a vi nh trong hnh 2
Hnh 2: Giao di n lm vi c c a vi
y l chng trnh so n th o th i n t r t thng d ng Cng s d ng phm l nh nh vi, nhng d s d ng hn. Cng tng t nh vi, m , ta g vo c a s terminal : pico. ho c
$pico [tn file] N u [tn file] t n t i, n s c m . Cn khng, n s c t o m i. C a s pico xu t hi n. t h p phm thng d ng trong pico:
Sau y l m t s
S d ng phm mi tn ho c cc t h p phm: ctrl+f, ctrl+b, ctrl+n, ctrl+p di chuy n ti n ln, li v m t k t , xu ng dng ti p theo ho c v dng tr c . T h p phm ctrl+v: li v 1 trang 3
Hnh 3: Giao di n lm vi c c a trnh so n th o pico T h p phm ctrl+y: ti n ln 1 trang Ctrl + k: xa dng hi n t i Crtl + u: ph c h i l i o n text b xa cu i cng. Ctrl + x: thot kh i pico. N u file cha c lu, n s thng bo. N u ng lu b n n phm Y, ng c l i n phm N. 1.1.3. Trnh so n th o Emacs
y l m t trong nh ng trnh so n th o vn b n m nh nh t hi n nay trong Unix Th ng dng so n th o chng trnh v i nhi u tnh nng dnh cho l p trnh D
vin c tch h p s n.
M ts
s d ng, c th ch y b ng giao di n c a n, giao di n c a ng i dng ho c giao di n dng l nh c b n c a ng i dng. t h p phm thng d ng:
ctrl+f: ti n ln 1 k t ctrl+b: li v 1 k t esc+f: ti n ln 1 t esc+b: li v 1 t ctrl+n: ti n ln 1 dng ctrl+p: li v 1 dng ctrl+v: t i mn hnh ti p theo esc+v: quay l i mn hnh tr c phm delete: xa li ctrl+d: xa ti n esc+delete: xa li 1 t esc+d: xa ti n 1 t 4
ctrl+k: xa t v tr con tr n cu i dng ctrl+y: tng t ctrl+u trong pico Trn y l m t s trong nhi u trnh so n th o cho php chng ta c th t o ra m ngu n. Ti p theo, chng em s trnh by v trnh bin d ch t cc m ngu n ny t o ra file th c thi trong Linux.
cc trnh bin d ch m ngu n m cho cc ngn ng l p trnh. Tn g c c a n l GNU C Compiler b i v lc u n ch s d ng cho ngn ng l p trnh C. Cc phin b n m i hn sau ny m i m r ng ra d ch nhi u ngn ng khc n a nh: C++, java, Fortran, . . . i u hnh
t ng ci trnh bin d ch gcc. Nhng n u cha c th ta hon ton c th ci m t cch bnh th ng nh ci t cc chng trnh khc (i u ny c trnh by m c 1.1 ). ti n hnh bin d ch nh sau. Trn c a s terminal, ta chuy n n th m c ch a file m ngu n, r i bin d ch b ng cu l nh:
-c: Gip trnh bin d ch file va th t c t o m t object file. File object c ph n m r ng l .o ho c .obj. -o <name>: <name> l tn m ta t cho file ch y th c thi thay cho tn m c nh (tn file m c nh l a.out). -g: T o chng trnh v c hi n thng bo l i (n u c). -I <directory name>: Thm th m c c bi t (bao g m c ng d n) tm ki m. Trnh bin d ch s tm trong th m c cc file c khai bo u file ngu n (ch a code). M c nh trnh bin d ch s search trong /usr/include -L <directory name>: Tm th vi n (Tng t -I), m c nh l /usr/lib
KDevelop Gambas
mi n ph dnh cho h i u hnh Windows v Linux. Code::Blocks h tr GCC (MinGW / Linux GCC), VC++ Toolkit, Digital Mars Compiler, Borland C++ v Open Watcom, LCC v Intel C++ Compiler. d ng framework wxWidget. B n thn n khng c th d ch(compile) g c nhng n tch h p cc chng trnh : chng trnh so n th o, chng trnh d ch, chng trnh b t l i, . . .
Cross-platform, n c th run trn m i h i u hnh, bao g m: Mac, Linux, Windows,. . . R t g n nh , ch c ng 70Mb. C th ch n b t c compiler bin d ch source, m c nh l gcc. H tr format source code r t ti n l i cho vi c copy code t cc site khc v , v ch nh s a l i. N cng gi ng nh VC++, chng ta khng ph i tr b t c m t ph no download v s d ng n.
$sudo apt-get install codeblocks Ho c c th vo Sorfware center, search code block, sau ch n install. H th ng s t ng ci t code::blocks d ng: minh h a hnh 4, 5, 6, 7, 8, 9 Sau khi ci t v kh i ng chng trnh code blocks, c a s chng trnh : t o project m i ta vo New Project. . . ho c kch vo bi u t ng Newfile ch n project. Sau s hi n ra c a s : 5 Nhn bn gc tri, ta th y project c a chng ta v trong folder Sources, c m t file m c nh tn l main.cpp. y l file m c nh cho chng trnh in ra Hello World n gi n m Code::Blocks generate. Cc b n c th thm b t c code g vo file ny v bin d ch l i. bin d ch chng trnh trong Code::Blocks, chng ta ch vi c nh n F9 l xong. Code::Blocks s t ng save file v compile. Nh n F10 run s th y c k t qu nh trn mn hnh. (Hnh 9) N u chng trnh b l i, s c thng bo trong c a s Build messages. 6
Hnh 5: T o project m i
NetBeans c vi t hon ton b ng Java v c th NetBeans Platform cho php cc NetBeans IDE h
ch y c trn nhi u h i u hnh khc nhau nh l Windows, OS X, Linux, Solaris v n n t ng khc h tr tng thch JVM, l m t mi tr ng pht tri n tch h p (IDE) cho pht tri n v i Java, JavaScript, PHP, Python (khng cn c h tr sau NetBeans 7), Groovy, C, C++, Scala, Clojure v nh ng ngn ng khc. ng d ng c pht tri n t m t t p h p cc m-un thnh ph n. Cc ng d ng d a trn n n t ng NetBeans (bao g m c IDE NetBeans) c th c m r ng b i cc nh pht tri n bn th ba. tr pht tri n c a t t c cc lo i ng d ng Java (Java SE (bao 7
Hnh 7: Nh p tn project
Hnh 9: Giao di n lm vi c c a Code::Blocks g m c JavaFX ), Java ME, web, EJB v cc ng d ng i n tho i di ng ) ra kh i h p. c th ti s d ng ph bi n cho cc ng d ng my tnh bn, cho php cc nh pht tri n t p trung vo logic c th ng d ng c a h . Trong , cc tnh nng c a n n t ng ny l: Qu n l giao di n ng i dng (v d nh cc menu v thanh cng c ) Qu n l s d ng ci t Qu n l lu tr (ti t ki m v t i b t k lo i d li u) C a s qu n l Khun kh thu t s (h tr b c-by-step h p tho i) 8
N n t ng cung c p cc d ch v
Th vi n NetBeans tr c quan
Ci t Netbeans tng t
nh Code::Blocks. Tuy nhin, c th so n th o m ngu n C/C++, c n ci thm cc plugin (minh h a hnh 11, 12)
Hnh 15: Giao di n lm vi c c a NetBeans Nh v y, chng ta c th vi t m ngu n C/C++ v bin d ch m ngu n thnh cc file th c thi. Tuy nhin, cn m t v n quan tr ng trong qu trnh l p trnh, l s d ng th vi n. B i c r t nhi u chng trnh c vi t ra, n u khng s d ng th vi n v i cc hm c s n ho c l m ngu n s r t di v ph c t p ho c khng th vi t h t c. V y, vi c s d ng th vi n trong khi l p trnh trong mi tr ng Linux nh th no? M c 2 s ni r hn v v n ny.
2. Th vi n
Nh trnh by cc t p tin th vi n. pha trn, t o ra chng trnh th c thi, chng ta c n ph i c
10
dng r t nhi u l i g i h th ng . Cc th vi n trn linux c t chc d i d ng tnh (static library) v th vi n chia s (shared library) v ng (dynamic library), th vi n tnh c lin k t c nh vo trong chng trnh trong ti n trnh lin k t, nn cn g i l th vi n lin k t tnh. c n p vo b nh trong khi chng trnh b t u th c hi n v cho php cc ng d ng cng chia s lo i th vi n ny . nh ch khi no chng trnh g i t i.
Th vi n lin k t tnh c n p vo b
2.1. Th vi n tnh
2.1.1. c i m
l y ton b m
Gi
/* cong.c */ int cong( int a, int b ) { return a + b; } /* nhan.c */ long nhan( int a, int b ) { return a * b; }
t o ra hai t p tin th vi n i t ng .o
11
C th dng l nh file xem file libfoo.a l lo i g Sau khi c c th vi n libfoo.a, chng ta lin k t l i v i chng trnh.
V d : $ gcc program.o oprogram libfoo.a
Chng ta c th
s d ng ty ch n l ch nh th vi n khi bin d ch thay cho cch trn. Tuy nhin libfoo.a khng n m trong th m c th vi n chu n, c n ph i k t h p v i ty ch n L ch nh ng d n tm ki m th vi n trong th m c hi n hnh. D i y l cch bin d ch: $ gcc program.c oprogram L lfoo
m t chng trnh no g i c cc hm trong 2 th vi n .o trn, chng ta c n t o m t t p tin header .h khai bo cc nguyn m u hm ng i s d ng tri u g i: /* lib.h */ int cong(int a, int b); long nhan(int a, int b);
2.2. Th vi n chia s
Cn g i l th vi n dng chung C nhi u l i nhu n hn th vi n tnh T n t ti nguyn h th ng,v s d ng t khng gian a. S d ng t n t b nh M ngu n trong th vi n dng chung d b o tr Vi c xy d ng th vi n dng chung c s khc bi t so v i th vi n tnh
Khi bin d ch file i t ng s d ng ty ch n -fpic c a gcc s t o ra m c l p v tr, t c th lin k t ho c s d ng b t k ch no Khng lo i b file i t ng v khng s d ng cc ty ch n fomit, -frame, pointer c a gcc S d ng ty ch n share, -soname c a gcc S d ng ty ch n Wl c a gcc truy n tham s t i trnh lin k t ld Th c hi n ti n trnh lin k t d a vo th vi n C, s d ng ty ch n l c a gcc
s d ng th vi n dng chung m i chng ta quay l i chng trnh ki m tra, chng ta c n h ng trnh lin k t n th vi n no s d ng v tm n u, v v y chng ta s d ng ty ch n l v L $gcc g errtest .c orrtest -L .-lerr
Cu i cng,
$LD_LIBBRARY_PATH= $(pwd)./errtest
2.3. Th vi n lin k t ng
2.3.1. c i m
Th vi n lin k t ng chi m t ti nguyn b nh Cc hm trong th vi n lin k t ng khng tr c ti p a vo chng trnh lc bin Trnh lin k t lu thng tin lin k t n cc hm trong th vi n lin k t ng H i u hnh s n p cc trnh lin k t c n thi t vo b nh
d ch v lin k t
2.3.2. T o th vi n lin k t ng
a vo th vi n lin k t ng, chng ta ph i thm ty ch n fpic (PIC- Position Independence Code m l nh v tr c l p). V d : bin d ch l i 2 t p tin cong.c v nhan.c
13
By gi
$ gcc shared cong.o nhan.o libfoo.so chng ta c th vi n lin k t ng libfoo.so. Bin d ch l i chng trnh (program.c)nh sau: $ gcc program.c oprogram L. libfoo
2.3.3. S d ng th vi n lin k t ng
Khi H
N u th vi n n m trong th m c hi n hnh th ta ph i a vo bi n mi tr ng
LD_LIBBRARY_PATH
V d : th vi n libfoo.so
Ki m tra xem H
$ ldd program
R i ch y chng trnh s
$./program
d ng th vi n lin k t ng ny:
M t khuy t i m c a vi c s d ng th vi n lin k t ng l th vi n ph i t n t i trong ng d n H i u Hnh tm ra khi chng trnh c tri u g i. N u khng tm th y th vi n, H i u Hnh s ch m d t ngay chng trnh cho d cc hm trong th vi n cha c s d ng. Ta c th ch ng n p v g i cc hm trong th vi n lin k t ng m khng c n nh vo H i u Hnh b ng cch g i hm lin k t mu n.
Cng c
phn.
Cng c
Cng c Cng c
C php s d ng: ar{dmpqrtx}[thnh vin ] tn file idd: li t k cc th vi n chia s m m t chng trnh yu c u m ch y , v h u ch hn nhi u so v i l nh nm C php s d ng: idd [option] file idconfig: xc nh r cc lien k t ng c yu c u b i th vi n c chia s n m trong cc th m c /usr/lib v /lib 14
3. Makefile
m c 1, chng ta bi t cch t o v bin d ch m t file m ngu n n gi n. n ph n ny, chng em s trnh by su hn v cch bin d ch sau khi tm hi u v cc th vi n. Sau y l n i dung chi ti t. Nh chng ta bi t, m t trong nh ng cng vi c quan tr ng c a ng i l p trnh l chuy n cc file ngu n thnh cc file chng trnh c th th c thi c. Qu trnh ny s chuy n nh ng cu l nh c vi t theo ngn ng g n gi v i con ng i sang d ng m h th ng my tnh c th hi u v th c thi c. Ng i ta g i l qu trnh bin d ch. V cng c m ng i l p trnh s d ng th c hi n cng vi c ny c g i l trnh bin d ch. Bin d ch cc chng trnh C/C++ trong mi tr ng Linux c chia thnh 2 d ng l n, l:
Gi
#include <iostream> using namespace std; int main() { cout << hello world << endl ; return 0; }
th c thi file m ngu n ny, chng ta s bin d ch n. Trong ch bin d ch theo dng l nh, chng ta s bin d ch trn c a s terminal v i cu l nh nh sau: g++ hello.cpp
th y xu t hi n thm 1 file c tn l: a.out. y chnh l file th c thi chng trnh m chng ta v a bin d ch c. ch y n, s d ng cu l nh:
cu i cu l nh th hn, b i v, khi b n vi t u th r t c th , h th ng s b qua tn b n t m t tn file th c thi c a b n theo m c nh, cn file th c thi b n t tn s b ghi b i file m ngu n.
l tr ng h p b n bin d ch 1 file m ngu n. V y n u chng trnh c a chng ta c nhi u hn 1 file m ngu n th s lm nh th no? Trong tr ng h p , chng ta ch c n ghi h t cc tn file m ngu n trong cu l nh, v d nh sau: g++ hello.cpp util.cpp util2.cpp -o hello V by gi , chng ta s cng c ci nhn c th hn v qu trnh bin d ch. Ti n trnh: cc file trung gian
trnh bin d ch C/C++ bin d ch cc file m ngu n ra chng trnh c th th c thi c c n tr i qua cc giai o n sau: 1. Pre-process: giai o n ti n x l, giai o n ny th c hi n nhi m v lo i b cc ch thch, pht tri n cc macro #define, #include. . . 2. Compile: giai o n chuy n i m ngu n v xy d ng u ra b ng h p ng . 3. Assemble: t file h p ng v a nh n c,trnh bin d ch xy d ng file i t ng.
trnh bin d ch c th c d ng t i b t k m t giai o n no b ng cch s d ng ty ch n sau: -E : d ng sau giai o n pre-process. N s output m ngu n ra c a s terminal. -S: dng sau giai o n compile. N s cho ra h p ng c a m i file ngu n c cng tn v i file ngu n nhng c ph n m r ng l .s -c: d ng sau giai o n assemble. N s cho ra m t file i t ng cho m i file ngu n c cng tn nhng c ph n m r ng l .o
hi u r hn, chng ta s d ng l i cc giai o n bin d ch chng trnh hello.cpp. Trong c a s terminal, chng ta g: g++ -E hello.cpp Nh trong hnh, cu l nh #include<iostream> c thay th b i m ngu n c t o ra b i th vi n <isotream>.
Ti p theo, chng ta g:
g++ -S hello.cpp
16
Cu l nh ny t o ra m t file c tn l: hello.s. xem c file ny, chng ta s d ng l nh less nh sau: less hello.s
Ti p theo, chng ta s
g++ -c hello.cpp
Cu l nh ny t o ra file hello.o. File ny ch a m my v c th c xem b ng cch g: hexdump hello.o Cu l nh ny s chuy n cc s nh phn sang s h hexa.
y, chng ta ch
Cu l nh ny s t o ra m t file th c thi c tn l hello. Chng ta c th xem n b ng cch s d ng l nh hexdump nh trn ho c c th ch y tr c ti p b ng cu l nh ./hello trnh by. Ty ch n bin d ch Ngoi cc ty ch n v a trnh by
-Wall: ch
ra t t c cc c nh bo bin d ch.
c s ph thu c l n nhau gi a cc file m ngu n v cc th vi n. S ph thu c ny x y ra khi m ngu n trong m t file tham chi u n m t ho c nhi u i t ng c khai bo ho c nh ngha trong m t file m ngu n khc. V l do , th t m chng ta bin d ch v lin k t cc file ng m t vai tr h t s c quan tr ng.
s chng ta c 5 file m ngu n, trong , file main.cpp ch a hm main v 4 file khc l: util_A.cpp, util_B.cpp, util_C.cpp, util_D.cpp. S ph thu c c a chng c minh h a trong hnh 16. i u hnh Linux c m t cng c c xy d ng s n u qu n l nh ng cng vi c ph c t p nh v y, g i l make.
17
ten_luat: cn g i l target, c th
danhSachCacPhuThuocLuat: danh sch cc lu t khc m lu t ny ph thu c vo danhSachCacPhuThuocFile: danh sch cc file c n c th c thi lu t ny. d u tab b t bu c ph i c cho lu t ny c th th c thi c. l nh th c thi Chng ta th c thi nh ng lu t ny b ng cch s th c ti n ch make. make c g i C v
l b t c tn g nhng thng th ng, ng i ta hay t trng v i tn c a cc file i t ng (.o). M i target s km theo 0 ho c nhi u cu l nh th c thi.
m khng c tham s km theo s th c hi n lu t u tin trong Makefile. Cn n u make c theo sau b i tn c a m t lu t th n s th c thi lu t y.
t m th ng nhng m t c i m quan tr ng c a cc makefile l nh ng cu ch thch c th c thm vo lm r cc cng vi c khc nhau trong qu trnh bin d ch project. Cc cu ch thch c kh hi u b ng d u #.
Php gn
cho n.
V d
CC = gcc LIBS = -lpthread TARGET = prog OBJS = main.o thread.o ${TARGET}: ${OBJS} ${CC} ${LIBS} o ${TARGET} ${OBJS} Sau y, l m t v d s d ng makefile.
th c thi lu t u tin trong makefile. Sau khi th c hi n lu t ny s sinh ra file th c thi. N u ch nh v y thi th ti n ch make khng th t h u ch cho l m ngoi vi c gi m th i gian nh my cho m i l n bin d ch file m ngu n. Tuy nhin, make c th lm c nhi u hn th . V d , make c th bi t t l n bin d ch cu i cng, file m ngu n c a b n c thay i g hay khng? Gi , chng ta g l nh make l i m t l n n a, chng ta s nh n c k t qu nh sau. make lm c i u ny b ng cch so snh th i gian thay i c a file output hello v i th i gian thay i c a file m ngu n hello.cpp. V th , n u chng ta touch file ny thay i th i gian s a i c a n th chng ta c th nh l a c makekhi bin d ch l i. touch hello.cpp make Nhn chung, make so snh th i gian thay i c a m i file c nh danh trong danh sch ph thu c v i th i gian thay i c a file output c th c hi n b i lu t . N u c b t k file ph thu c no c s a i n s thi hnh l i cu l nh c nh ngha b i lu t .
#include <iostream> using namespace std; void emphasize() { cout << "!!!" << endl ; }
Ti p n, m
#include "util.h" #include <iostream> using namespace std; int main() { cout << "Hello World"; emphasize(); return 0; }
# our first makefile - version 2 hello: hello.o util.o g++ hello.o util.o o hello hello.o: hello.cpp g++ -c hello.cpp util.o: util.h util.cpp g++ -c util.cpp clean: rm *.o hello File makefile ny minh h a r rng hn cc ph thu c c s d ng nh th no. xem khi th c hi n cu l nh make th i u g s x y ra.
Sau y, chng ta s
make
y l l nh c tn: hello
2. hello c cc ph thu c: hello.o v util.o. N u nh ng file ny khng c li t k ra th make s tm m t lu t m ni cho n bi t cch xy d ng chng. Gi s , c hai file khng c li t k. 3. u tin, make tm lu t xy d ng hello.o. Lu t ny tm th y c d i. pha
4. Lu t ny ph thu c vo hello.cpp. Do hello.cpp c li t k r i nn cu l nh th c thi v m t file i t ng hello.o c t o ra. 5. Sau , make quay l i lu t hello v th y file util.o v n cha c li t k, n l i ti p t c i tm lu t xy d ng file ny. 6. Trong lu t util.o chng ta th y n ph thu c vo util.h v util.cpp. Nh ng file ny c li t k, v v y cu l nh c th c thi v file util.o c t o ra. 7. Cu i cng c hai file hello.o v utl.o c m t. V th , lu t hello thi hnh cu l nh c a n v lin k t cc file i t ng thnh m t file th c thi c t tn l hello.
d n d p cc file i
4. Debug
21
5. K t lu n
Trn y l nh ng tm hi u c a chng em v ti: Mi tr ng l p trnh C/C++ trong Linux - Makefile - L p trnh ng d ng. Qua y, chng em bi t cch l p trnh C/C++ s d ng cc trnh so n th o v trnh bin d ch dng l nh gcc/g++. Ngoi ra, chng em cn bi t cch s d ng cc IDE h tr cng vi c l p trnh nh Code::Blocks hay Netbeans. c bi t, chng em cn lm quen c khi ni m Makefile v cch s d ng ti n ch Make m t cch n gi n. Tuy nhin, do th i gian khng c nhi u, v nh ng ki n th c cn cha hon ch nh nn ch c ch n s khng kh i nh ng thi u xt. Chng em r t mong nh n c l i nh gi, gp c a c bi bo co ny c hon thi n hn n a. Chng em xin chn thnh c m n c!
22
Ti li u
[1] http://en.wikipedia.org/wiki/NetBeans, l n truy nh p cu i: ngy 20/11/2012. [2] http://en.wikipedia.org/wiki/Code::Blocks, l n truy nh p cu i: ngy 20/11/2012. [3] http://diendan.congdongcviet.com/showthread.php?t=16222, l n truy nh p cu i: ngy 20/11/2012. [4] http://vi.scribd.com/doc/77914649/89/Th%C6%B0-vi%E1%BB%87n-lienk%E1%BA%BFt, l n truy nh p cu i: ngy 23/11/2012. [5] http://tailieu.vn/xem-tai-lieu/su-khac-nhau-co-ban-giua-lap-trinh-c-trong-linux-vawindows.607685.html, l n truy nh p cu i: ngy 23/11/2012. [6] Computer Science Department. The Linux Programming Environment. Texas State University. [7] Richard Stones Nei Matthew. Beginning Linux Programing. Wiley Publishing, 10475 Crosspoint Boulevard, 2004.