GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
-
Upload
borellam7606 -
Category
Documents
-
view
224 -
download
0
Transcript of GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
1/12
TABLE OF CONTENTS (HIDE)
1. GCC (GNU Compiler Collection
1.1 A Brief History and Introducti
1.2 Installing GCC
1. Getting !tarted
1." GCC Compilation #rocess
1.$ Headers (.h)% !tatic &i'raries (
1. GCC n*ironment +aria'les
1., Utilities for -amining te Co
2. GNU 0ae
2.1 /irst 0aefile By -ample
2.2 0ore on 0aefile
2. A !ample 0aefile
2." Brief !ummary
yet another insignificant programming notes... | HOME
GCC and MakeCompiling, Linking andBuildingCC!! "pplications
1. GCC (GNU Compiler Collection)
1.1 A Brief History and Introduction to CC
e original GNU C Compiler (GCC) is de*eloped 'y 3icard !tallman% te founder of te GNU Project . 3icard !tallman
founded te GNU pro4ect in 156" to create a complete Uni-7lie operating system as free soft8are% to promote freedom
and cooperation among computer users and programmers.
GCC% formerly for 9GNU C Compiler 9% as gro8n o*er times to support many languages suc as C::% ;'4ecti*e7C% >gcc.gnu.org> .
GCC is a ey component of 9GNU Toolchain9% for de*eloping applications% as 8ell as operating systems. e GNU oolcainincludes=
GNU Compiler Collection (GCC)= a compiler suit tat supports many languages% suc as C>C::% ;'4ecti*e7C and
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
2/12
0inG@ (0inimalist GNU for @indo8s) is a port of te GNU Compiler Collection (GCC) and GNU Binutils for use in
@indo8s. It also included 0!! (0inimal !ystem)% 8ic is 'asically a Bourne sell (bash).
Cy#&in CC
Cyg8in is a Uni-7lie en*ironment and command7line interface for 0icrosoft @indo8s. Cyg8in is uge and includes most
of te Uni- tools and utilities. It also included te commonly7used Bas sell.
8o *ersions of GCC are installed% identified *ia gcc‐3.exe and gcc‐4.exe (and g++‐3.exe and g++‐4.exe). It also
pro*ides symlins gcc.exe and g++.exe% 8ic are lined to gcc‐4.exe and g++‐4.exe% respecti*ely.
'ersions
ou could display te *ersion of GCC *ia ‐‐version option=
// Cygwin in bash shell
$ gcc ‐‐version
gcc (GCC) 4.5.3
$ gcc‐3 ‐‐version
gcc‐3 (GCC) 3.4.4 (cygming special g!c ".# %sing !m! ".#5)
// &inG' in C& shell gcc ‐‐version
gcc (GCC) 4.*.
g++ ‐‐version
gcc (GCC) 4.*.
0ore details can 'e o'tained *ia ‐v option% for e-ample%
gcc ‐v
sing b%il,‐in specs.
C-C01GCC2gcc
C-C010-1'2!6/mingw/bin/../libexec/gcc/mingw3/4.*./l,o‐wrapper.exe
0arge,6 mingw3
Con7ig%re! wi,h6 ../gcc‐4.*./con7ig%re ‐‐enable‐lang%ages2cc++a!a7or,ranob8cob8‐c++
‐‐!isable‐s8l8‐excep,ions ‐‐wi,h‐!war7 ‐‐enable‐share! ‐‐enable‐libgomp
‐‐!isable‐win3‐regis,ry ‐‐enable‐libs,!cxx‐!eb%g ‐‐enable‐version‐speci7ic‐r%n,ime‐libs
‐‐b%il!2mingw3 ‐‐pre7ix2/mingw
0hrea! mo!el6 win3
gcc version 4.*. (GCC)
He"
ou can get te elp manual *ia te ‐‐help option. /or e-ample%
gcc ‐‐help
$an a#es
ou can read te GCC manual pages (or man pages) *ia te man utility=
man gcc
// or
man g++
// ress space 9ey 7or nex, page or :;: ,o ;%i,.
3eading man pages under C0? or Bas sell can 'e difficult. ou could generate a te-t file *ia=
man gcc | col ‐b > gcc.txt
e col utility is needed to strip te 'acspace. (/or Cyg8in% it is a*aila'le in 9Utils9% 9util7linu-9 pacage.)
Alternati*ely% you could loo for an online man pages% e.g.% ttp=>>linu-.die.net>man>1>gcc.
/or 0inG@% te GCC man pages are ept in 9share
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
3/12
1.* ettin# Started
e GNU C and C:: compiler are gcc and g++% respecti*ely.
Co+i"e,Lin- a Si+"e C ro#ra+ hello.c
Belo8 is te Hello78orld C program hello.c=
#
3
4
5
*
=
// hello.c>incl%!e ?s,!io.h
in, main() @
prin,7(ABello worl!
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
4/12
// Compile an! lin9 so%rce hello.cpp in,o exec%,able hello.exe
hello
// xec%,e %n!er C& shell
$ ./hello
// xec%,e %n!er ash or o%rne shell speci7ying ,he c%rren, pa,h (./)
$ore CC Co+i"er Otions
A fe8 commonly7used GCC compiler options are=
$ g++ ‐Wall ‐g ‐o Hello.exe Bello.cpp
‐o= specifies te output e-ecuta'le filename.
‐'all= prints 9all9 8arning messages.
‐g= generates additional sym'olic de'uggging information for use 8it g!b de'ugger.
Co+i"e and Lin- Searate"y
e a'o*e command compile te source file into o'4ect file and lin9 8it oter o'4ect files (system li'rary) into
e-ecuta'le in one step. ou may separate compile and lin in t8o steps as follo8s=
// Compile‐only wi,h ‐c op,ion
g++ ‐c ‐'all ‐g Bello.cpp
// in9 ob8ec, 7ile(s) in,o an exec%,able
g++ ‐g ‐o Bello.exe Bello.o
e options are=
‐c= compile into o'4ect file 9Bello.o9. By default% te o'4ect file as te same name as te source file 8it e-tension
of 9.o9 (tere is no need to specify ‐o option). No lining 8it oter o'4ect file or li'rary.
&ining is performed 8en te input file are o'4ect files 9.o9 (instead of source file 9.cpp9 or 9.c9). GCC uses a
separate liner program (called l!.exe) to perform te lining.
Co+i"e and Lin- $u"ti"e Source Fi"es
!uppose tat your program as t8o source files= 7ile#.cpp% 7ile.cpp. ou could compile all of tem in a single
command=
g++ ‐o myprog.exe 7ile#.cpp 7ile.cpp
Ho8e*er% 8e usually compile eac of te source files separately into o'4ect file% and lin tem togeter in te later stage.
In tis case% canges in one file does not reEuire re7compilation of te oter files.
g++ ‐c 7ile#.cpp
g++ ‐c 7ile.cpp
g++ ‐o myprog.exe 7ile#.o 7ile.o
Co+i"e into a S0ared Lirary
o compile and lin C>C:: program into a sared li'rary (A.!llA in @indo8s% A.soA in Uni-es)% use ‐share! option.
3ead 9
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
5/12
GCC compiles a C>C:: program into e-ecuta'le in " steps as so8n in te a'o*e diagram. /or e-ample% a 9gcc ‐o
hello.exe hello.c9 is carried out as follo8s=
#re7processing= *ia te GNU C #reprocessor (cpp.exe)% 8ic includes te eaders (>incl%!e) and e-pands te
macros (>!e7ine).
cpp hello.c > hello.i
e resultant intermediate file 9hello.i9 contains te e-panded source code.
1.
Compilation= e compiler compiles te pre7processed source code into assem'ly code for a specific processor.
gcc ‐S hello.i
e ‐F option specifies to produce assem'ly code% instead of o'4ect code. e resultant assem'ly file is 9hello.s9.
2.
Assem'ly= e assem'ler (as.exe) con*erts te assem'ly code into macine code in te o'4ect file 9hello.o9.
as ‐o hello.o hello.s
.
&iner= /inally% te liner (l!.exe) lins te o'4ect code 8it te li'rary code to produce an e-ecuta'le file
9hello.exe9.
ld ‐o hello.exe hello.o ...libraries...
".
'erose $ode (‐v )
ou can see te detailed compilation process 'y ena'ling ‐v (*er'ose) option. /or e-ample%
gcc ‐v hello.c ‐o hello.exe
Definin# $acro (‐D)
ou can use te ‐name option to define a macro% or ‐name2value to define a macro 8it a *alue. e value sould
'e enclosed in dou'le Euotes if it contains spaces.
1.3 Headers (.h)4 Static Liraries (.lib4 .a) and S0ared Lirary (.dll4 .so)
Static Lirary 5s. S0ared Lirary
A li'rary is a collection of pre7compiled o'4ect files tat can 'e lined into your programs *ia te liner. -amples are te
system functions suc as prin,7() and s;r,().
ere are t8o types of e-ternal li'raries= static library and shared library .A static li'rary as file e-tension of 9.a9 (arci*e file) in Uni-es or 9.lib9 (li'rary) in @indo8s. @en your program is
lined against a static li'rary% te macine code of e-ternal functions used in your program is copied into te
e-ecuta'le. A static li'rary can 'e created *ia te archive program 9ar.exe9.
1.
A sared li'rary as file e-tension of 9.so9 (sared o'4ects) in Uni-es or 9.!ll9 (dynamic lin li'rary) in @indo8s.
@en your program is lined against a sared li'rary% only a small ta'le is created in te e-ecuta'le. Before te
e-ecuta'le starts running% te operating system loads te macine code needed for te e-ternal functions 7 a
process no8n as dynamic linking. ?ynamic lining maes e-ecuta'le files smaller and sa*es dis space% 'ecause one
copy of a li'rary can 'e sared 'et8een multiple programs. /urtermore% most operating systems allo8s one copy of
a sared li'rary in memory to 'e used 'y all running programs% tus% sa*ing memory. e sared li'rary codes can
'e upgraded 8itout te need to recompile your program.
2.
Because of te ad*antage of dynamic lining% GCC% 'y default% lins to te sared li'rary if it is a*aila'le.
ou can list te contents of a li'rary *ia 9nm filename9.
Searc0in# for Header Fi"es and Liraries (‐I4 ‐ and ‐l)
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
6/12
@en compiling te program% te compiler needs te header files to compile te source codesD te linker needs te libraries
to resol*e e-ternal references from oter o'4ect files or li'raries. e compiler and liner 8ill not find te eaders>li'raries
unless you set te appropriate options% 8ic is not o'*ious for first7time user.
/or eac of te eaders used in your source (*ia >incl%!e directi*es)% te compiler searces te so7called include-paths
for tese eaders. e include7pats are specified *ia ‐Idir option (or en*ironment *aria'le C0B). !ince te eaderFs
filename is no8n (e.g.% ios,ream.h% s,!io.h)% te compiler only needs te directories.
e liner searces te so7called library-paths for li'raries needed to lin te program into an e-ecuta'le. e li'rary7pat
is specified *ia ‐dir option (uppercase :: follo8ed 'y te directory pat) (or en*ironment *aria'le IJ10B). In
addition% you also a*e to specify te li'rary name. In Uni-es% te li'rary lib xxx .a is specified *ia ‐l xxx option
(lo8ercase letter :l:% 8itout te prefi- 9lib9 and A.a9 e-tension). In @indo8s% pro*ide te full name suc as
‐lxxx.lib. e liner needs to no8 'ot te directories as 8ell as te li'rary names. Hence% t8o options need to 'e
specified.
Defau"t Inc"udeat0s4 Liraryat0s and Liraries
ry list te default include7pats in your system used 'y te 9GNU C #reprocessor9 *ia 9cpp ‐v9=
cpp ‐v
......
>incl%!e A...A search s,ar,s here6>incl%!e ?... search s,ar,s here6
!6C:: General ⇒ #ats and !ym'ols ⇒ Under ta's 9Includes9% 9&i'rary #ats9 and 9&i'raries9. e settings
are applica'le to te selected pro4ect only.
1.7 CC En5iron+ent 'aria"es
GCC uses te follo8ing en*ironment *aria'les=
0B= /or searcing te e-ecuta'les and run7time sared li'raries (.!ll% .so).
C0B= /or searcing te include-paths for eaders. It is searced after pats specified in ‐I?dir options.
C1IKC10B and CF1IKC10B can 'e used to specify C and C:: eaders if te particular language
8as indicated in pre7processing.
IJ10B= /or searcing library-paths for lin li'raries. It is searced after pats specified in 7?dir options.
1.8 9ti"ities for E:a+inin# t0e Co+i"ed Fi"es
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
7/12
/or all te GNU utilities% you can use 9comman! ‐‐help9 to list te elp menuD or 9man comman!9 to display te man
pages.
;!ile; 9ti"ity Deter+ine Fi"e Tye
e utility 97ile9 can 'e used to display te type of o'4ect files and e-ecuta'le files. /or e-ample%
gcc ‐c hello.c
gcc ‐o hello.exe hello.o
!ile hello.o
hello.o6 H"3H* C-LL exec%,able no, s,rippe! ‐ version 3"H#
!ile hello.exe
hello.exe6 3 exec%,able (console) In,el H"3H* 7or &F 'in!ows
;nm; 9ti"ity List Sy+o" Ta"e of Oincl%!e ?s,!io.h
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
8/12
3
4
5
*
=
in, main() @
prin,7(ABello worl!
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
9/12
!.! $ore on $a-efi"e
Co++ent = Continuation
A comment 'egins 8it a > and lasts till te end of te line. &ong line can 'e 'roen and continued in se*eral lines *ia a
'ac7slas (u"esA general synta- for te rules is=
target1 Otarget2 ...P6 O pre‐req‐1 pre‐req‐2 ...P
Ocommand1
command2
......P
e rules are usually organied in suc as 8ay te more general rules come first. e o*erall rule is often name 9 all9%
8ic is te default target for ma9e.
0ony Tar#ets (or Artificia" Tar#ets)
A target tat does not represent a file is called a pony target. /or e-ample% te 9clean9 in te a'o*e e-ample% 8ic is 4ust a la'el for a command. If te target is a file% it 8ill 'e ceced against its pre7reEuisite for out7of7date7ness. #ony
target is al8ays out7of7date and its command 8ill 'e run. e standard pony targets are= all% clean% ins,all.
'aria"es
A *aria'le 'egins 8it a $ and is enclosed 8itin parenteses (...) or 'races @...E. !ingle caracter *aria'les do not
need te parenteses. /or e-ample% $(CC)% $(CC1LGF)% $Q% $R.
Auto+atic 'aria"es
Automatic *aria'les are set 'y mae after a rule is matced. ere include=
$Q= te target filename.
$S= te target filename 8itout te file e-tension.
$?= te first prereEuisite filename.
$R= te filenames of all te prereEuisites% separated 'y spaces% discard duplicates.
$+= similar to $R% 'ut includes duplicates.
$T= te names of all prereEuisites tat are ne8er tan te target% separated 'y spaces.
/or e-ample% 8e can re8rite te earlier maefile as=
all6 hello.exe
> $Q ma,ches ,he ,arge,D $? ma,ches ,he 7irs, !epen!en,hello.exe6 hello.o
gcc ‐o $Q $?
hello.o6 hello.c
gcc ‐c $?
clean6
rm hello.o hello.exe
'irtua" at0 #$%&H = vpath
ou can use U0B (uppercase) to specify te directory to searc for dependencies and target files. /or e-ample%
> Fearch 7or !epen!encies an! ,arge,s 7rom AsrcA an! Aincl%!eA !irec,ories
> 0he !irec,ories are separa,e! by space
U0B 2 src incl%!e
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
10/12
ou can also use vpa,h (lo8ercase) to 'e more precise a'out te file type and its searc directory. /or e-ample%
> Fearch 7or .c 7iles in AsrcA !irec,oryD .h 7iles in Aincl%!eA !irec,ory
> 0he pa,,ern ma,ching charac,er :V: ma,ches 7ilename wi,ho%, ,he ex,ension
vpa,h V.c src
vpa,h V.h incl%!e
attern >u"es
A pattern rule% 8ic uses pattern matcing caracter :V: as te filename% can 'e applied to create a target% if tere is no
e-plicit rule. /or e-ample%
> pplicable 7or crea,e .o ob8ec, 7ile.
> :V: ma,ches 7ilename.
> $? is ,he 7irs, pre‐re;%isi,e
> $(C-&I.c) consis,s o7 compiler name an! compiler op,ions
> $(-001-0I-KF) co%l! be ‐o $Q
V.o6 V.c
$(C-&I.c) $(-001-0I-K) $?
> pplicable 7or crea,e exec%,able (wi,ho%, ex,ension) 7rom ob8ec, .o ob8ec, 7ile
> $R ma,ches all ,he pre‐re;%isi,es (no !%plica,es)
V6 V.o$(IKM.o) $R $(-IF) $(IF) ‐o $Q
I+"icit attern >u"es
0ae comes 8it a uge set of implicit pattern rules. ou can list all te rule *ia ‐‐prin,‐!a,a‐base option.
!.* A Sa+"e $a-efi"e
is sample maefile is e-tracted from clipseFs 9C>C:: ?e*elopment Guide 70aefile9.
> sample &a9e7ile
> 0his &a9e7ile !emons,ra,es an! explains> &a9e &acros &acro xpansions
> %les 0arge,s epen!encies Comman!s Goals
> r,i7icial 0arge,s a,,ern %le epen!ency %le.
> Commen,s s,ar, wi,h a > an! go ,o ,he en! o7 ,he line.
> Bere is a simple &a9e &acro.
IKM10G0 2 ,es,1me.exe
> Bere is a &a9e &acro ,ha, %ses ,he bac9slash ,o ex,en! ,o m%l,iple lines.
-WF 2 <
0es,#.o <
0es,.o <
&ain.o
> Bere is a &a9e &acro !e7ine! by ,wo &acro xpansions.
> &acro xpansion may be ,rea,e! as a ,ex,%al replacemen, o7 ,he &a9e &acro.
> &acro xpansions are in,ro!%ce! wi,h $ an! enclose! in (paren,heses).
IF 2 $(-WF) $(IKM10G0)
> Bere is a simple %le (%se! 7or AcleaningA yo%r b%il! environmen,).
> I, has a 0arge, name! AcleanA (le7, o7 ,he colon A6A on ,he 7irs, line)
> no epen!encies (righ, o7 ,he colon)
> an! ,wo Comman!s (in!en,e! by ,abs on ,he lines ,ha, 7ollow).
> 0he space be7ore ,he colon is no, re;%ire! b%, a!!e! here 7or clari,y.
clean 6
rm ‐7 $(IF) echo Clean !one
> 0here are ,wo s,an!ar! 0arge,s yo%r &a9e7ile sho%l! probably have6
> AallA an! AcleanA beca%se ,hey are o7,en comman!‐line Goals.
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
di 12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
11/12
> lso ,hese are bo,h ,ypically r,i7icial 0arge,s beca%se ,hey !on:, ,ypically
> correspon! ,o real 7iles name! AallA or AcleanA.
> 0he r%le 7or AallA is %se! ,o incremen,ally b%il! yo%r sys,em.
> I, !oes ,his by expressing a !epen!ency on ,he res%l,s o7 ,ha, sys,em
> which in ,%rn have ,heir own r%les an! !epen!encies.
all 6 $(IKM10G0)
echo ll !one
> 0here is no re;%ire! or!er ,o ,he lis, o7 r%les as ,hey appear in ,he &a9e7ile.
> &a9e will b%il! i,s own !epen!ency ,ree an! only exec%,e each r%le only once
> i,s !epen!encies: r%les have been exec%,e! s%ccess7%lly.
> Bere is a %le ,ha, %ses some b%il,‐in &a9e &acros in i,s comman!6
> $Q expan!s ,o ,he r%le:s ,arge, in ,his case A,es,1me.exeA.
> $R expan!s ,o ,he r%le:s !epen!encies in ,his case ,he ,hree 7iles
> main.o ,es,#.o an! ,es,.o.
$(IKM10G0) 6 $(-WF)
g++ ‐g ‐o $Q $R
> Bere is a a,,ern %le o7,en %se! 7or compile‐line.
> I, says how ,o crea,e a 7ile wi,h a .o s%77ix given a 7ile wi,h a .cpp s%77ix.
> 0he r%le:s comman! %ses some b%il,‐in &a9e &acros6
> $Q 7or ,he pa,,ern‐ma,che! ,arge,> $? 7or ,he pa,,ern‐ma,che! !epen!ency
V.o 6 V.cpp
g++ ‐g ‐o $Q ‐c $?
> 0hese are epen!ency %les which are r%les wi,ho%, any comman!.
> epen!ency %les in!ica,e ,ha, i7 any 7ile ,o ,he righ, o7 ,he colon changes
> ,he ,arge, ,o ,he le7, o7 ,he colon sho%l! be consi!ere! o%,‐o7‐!a,e.
> 0he comman!s 7or ma9ing an o%,‐o7‐!a,e ,arge, %p‐,o‐!a,e may be 7o%n! elsewhere
> (in ,his case by ,he a,,ern %le above).
> epen!ency %les are o7,en %se! ,o cap,%re hea!er 7ile !epen!encies.
&ain.o 6 &ain.h 0es,#.h 0es,.h
0es,#.o 6 0es,#.h 0es,.h
0es,.o 6 0es,.h
> l,erna,ively ,o man%ally cap,%ring !epen!encies several a%,oma,e!
> !epen!ency genera,ors exis,. Bere is one possibili,y (commen,e! o%,)...
> V.!ep 6 V.cpp
> g++ ‐& $(LGF) $? $Q
> incl%!e $(-WF6.o2.!ep)
!.2 Brief Su++ary
I a*e presented te 'asic mae features ere so tat you can read and understand simple maefiles for 'uilding C>C::
applications. 0ae is actually Euite comple-% and can 'e considered as a programming language 'y itself
>EFE>ENCES = >ESO9>CES
GCC 0anual 9Using te GNU Compiler Collection (GCC)9 ttp=>>gcc.gnu.org>onlinedocs.1.
GNU FmaeF manual ttp=>>888.gnu.org>soft8are>mae>manual>mae.tml.2.
3o'ert 0eclen'urg% 90anaging #ro4ects 8it GNU 0ae9% rd dition% 2"..
Latest #ersion tested$ Cyg%inMinG% GCC &.'.(
Last modified$ "pril, ()*+
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
di 12 09/09/2014 9.37
-
8/18/2019 GCC and Make - A Tutorial on how to compile, link and build C_C++ applications
12/12
eed-ack, comments, corrections, and errata can -e sent to Chua HockChuan /ehchua0ntu.edu.sg1 | HOME
C and Make - A Tutorial on how to compile, link and build C/C++ a... https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html