版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux環(huán)境下編譯10/8/20222/34GCC簡(jiǎn)介
gcc(GNU
C
Compiler)是GNU推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是GNU的代表作品之一。
gcc編譯器能將C、C++語言源程序、匯程式化序和目標(biāo)程序編譯、連接成可執(zhí)行文件.10/8/20223/34GCC常用編譯參數(shù)
-c:只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。
-o
output_filename:確定輸出文件的名稱為
output_filename,同時(shí)這個(gè)名稱不能和源文件同名。如果不給出這個(gè)選項(xiàng),gcc就給出預(yù)設(shè)的可執(zhí)行文件a.out。
-O:對(duì)程序進(jìn)行優(yōu)化編譯、連接,采用這個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但
是,編譯、連接的速度就相應(yīng)地要慢一些。10/8/20224/34GCC常用編譯參數(shù)
-Idirname:將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)。C程序中的頭文件包含兩種情況:#include
<stdio.h>#include
“myinc.h”其中,A類使用尖括號(hào)(<>),B類使用雙引號(hào)(“”)。對(duì)于A類,預(yù)處理程序cpp在系統(tǒng)預(yù)設(shè)包含文件目錄(如/usr/include)中搜尋相應(yīng)的文件,而對(duì)于B類,cpp在當(dāng)前目錄中搜尋頭文件,這個(gè)選項(xiàng)的作用是告訴cpp,如果在當(dāng)前目錄中沒有找到需要的文件,就到指定的dirname目錄中去尋找。在程序設(shè)計(jì)中,如果我們需要的這種包含文件分別分布在不同的目錄中,就需要逐個(gè)使用-I選項(xiàng)給出搜索路徑。10/8/20225/34GCC常用編譯參數(shù)
-Ldirname:將dirname所指出的目錄加入到程序函數(shù)檔案庫文件的目錄列表中,是在連接過程中使用的參數(shù)。在預(yù)
設(shè)狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要的檔案庫文件,這個(gè)選項(xiàng)告訴連接程序,首先到-L指定的目錄中去尋找,然后到系統(tǒng)預(yù)設(shè)路徑中尋找,如果函數(shù)庫存放在多個(gè)目錄下,就需要依次使用這個(gè)選項(xiàng),給出相應(yīng)的存放目錄。
-lname:在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫,該函數(shù)庫位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫。上面我們簡(jiǎn)要介紹了gcc編譯器最常用的功能和主要參數(shù)選項(xiàng),更為詳盡的資料可以參看Linux系統(tǒng)的聯(lián)機(jī)幫助。10/8/20226/34一個(gè)簡(jiǎn)單的例子—hello.c用vi編寫源文件:
#include<stdio.h> void
main(){printf(“hello
world.\n”);}用gcc編譯gcc
hello.c運(yùn)行
a.out10/8/20227/34GCC應(yīng)用舉例gcc
hello.cgcc
helo.c
–o
hello生成a.out生成hellogcc–O
hello.c–o
hello生成hellogcc–c
hello.c
生成hello.ogcc
hello.o–o
hello生成hello5.
gcc
–c
hello1.cgcc
–c
hello2.c生成hello1.o生成hello2.ogcc
hello1.o
hello2.o–o
hello生成hello6.
gcc
test1.o
–lm
–I/home/czn/include
–o
t10/8/20228/34Make簡(jiǎn)介
在開發(fā)大系統(tǒng)時(shí),經(jīng)常要將程序劃分為許多模塊。各個(gè)模塊之間存在著各種各樣的依賴關(guān)系,在Linux中通常使用
Makefile來管理。由于各個(gè)模塊間不可避免存在關(guān)聯(lián),所以當(dāng)一個(gè)模塊改動(dòng)后,其他模塊也許會(huì)有所更新,當(dāng)然對(duì)小系統(tǒng)來
說,手工編譯連接是沒問題,但是如果是一個(gè)大系統(tǒng),存在很多個(gè)模塊,那么手工編譯的方法就不適用了。為此,在Linux系統(tǒng)中,專門提供了一個(gè)make命令來自動(dòng)維護(hù)目標(biāo)文件。與手工編譯和連接相比,make命令的優(yōu)點(diǎn)在于他只更新修改過的文件,而對(duì)沒修改的文件則置之不理,并且make命令不會(huì)漏掉一個(gè)需要更新的文件。10/8/20229/34一個(gè)簡(jiǎn)單的例子先舉一個(gè)例子:a.c
b.c兩個(gè)程序a.cextern
void
p(char
*);main(){p("hello
world");}b.cvoid
p(char
*str){printf("%s\n",str);}z
Makefilehello:
a.c
b.cgcc
a.c
b.c
-o
helloz
執(zhí)行makegcc
a.c
b.c
-o
hello注意這里是一個(gè)Tab產(chǎn)生一個(gè)叫hello的可執(zhí)行程序10/8/202210/34書寫makefile文件
Makefile時(shí)由規(guī)則來組成的,每一條規(guī)則都有三部分組成:目
標(biāo)(object),依賴(dependency)和命令(command).在上面的例子中,Makefile只有一條規(guī)則,其目標(biāo)為hello,期依賴為a.c
b.c其命令為gcc
a.c
b.c-o
hello.
依賴可以是另一條規(guī)則的目標(biāo),也可以是文件.每一條規(guī)則被這樣處理.如目標(biāo)是一個(gè)文件是:當(dāng)它的依賴是文件時(shí),如果依賴的時(shí)間比目標(biāo)要新,則運(yùn)行規(guī)則所包含的命令來更新目標(biāo);如果依賴是另一個(gè)目標(biāo)則用同樣的方法先來處理這個(gè)目標(biāo).如目標(biāo)不是一個(gè)存在的文件時(shí),則一定執(zhí)行.10/8/202211/34一個(gè)簡(jiǎn)單的makefile文件
例如:Makefilehello:a.o
b.ogcc
a.o
b.o
-o
helloa.o:
a.cgcc
–c
a.cb.o:
b.cgcc
–c
b.c
當(dāng)運(yùn)行make時(shí),可以接一目標(biāo)名(eg:make
hello)作為參數(shù),表示要處理改目標(biāo)。如沒有參數(shù),則處理第一個(gè)目標(biāo)。對(duì)上述例子執(zhí)行make,則是處理hello這個(gè)目標(biāo)。
hello依賴于文件目標(biāo)a.o和b.o,則先去處理a.o,調(diào)用gcc–c
a.c來更新a.o,之后更新b.o,最后調(diào)用gcc
a.c
b.o-o
hello來更新hello.10/8/202212/34Make中的宏(macro)在make中是用宏,要先定義,然后在makefile中引用。宏的定義格式為:宏名=宏的值例:CC
=
gcchello:
a.o
b.o(宏名一般習(xí)慣用大寫字母)$(CC)
a.o
b.o
-o
helloa.o:
a.c$(CC)
–c
a.cb.o:
b.c$(CC)
–c
b.c10/8/202213/34系統(tǒng)定義的宏
還有一些設(shè)定好的內(nèi)部變量,它們根據(jù)每一個(gè)規(guī)則內(nèi)容定義。$@當(dāng)前規(guī)則的目的文件名$<依靠列表中的第一個(gè)依靠文件$^整個(gè)依靠的列表(除掉了里面所有重復(fù)的文件名)。$?依賴中所有新于目標(biāo)的
以用變量做許多其它的事情,特別是當(dāng)你把它們和函數(shù)混合使用的時(shí)候。如果需要更進(jìn)一步的了解,請(qǐng)參考GNUMake手冊(cè)。("man
make","man
makefile")10/8/202214/34修改原先的makefileCC =
gccCFLAGS
=
-OOBJS =
a.o
b.ohello:
$(OBJS)$(CC)
$^
-o
$@a.o:
a.c$(CC)
$(CFLAGS)
-c
$<b.o:
b.c$(CC)
$(CFLAGS)
-c
$<clean:rm
–f
*.o
hello10/8/202215/34隱含規(guī)則請(qǐng)注意在上面的例子里,幾個(gè)產(chǎn)生.o文件的命令都是一樣的,都是從.
c文件和相關(guān)文件里產(chǎn)生.o文件,這是一個(gè)標(biāo)準(zhǔn)的步驟。其實(shí)make已經(jīng)知道怎么做—它有一些叫做隱含規(guī)則的內(nèi)置的規(guī)則,這些規(guī)則告訴它當(dāng)你沒有給出某些命令的時(shí)候,應(yīng)該怎么辦。如果你把生成a.o和b.o的命令從它們的規(guī)則中刪除,make將會(huì)查找它的隱含規(guī)則,然后會(huì)找到一個(gè)適當(dāng)?shù)拿睢?0/8/202216/34用戶環(huán)境變量的設(shè)定10/8/202217/34LINUX中BASH環(huán)境變量的設(shè)定順序
登錄Linux后,BASH要讀取幾個(gè)文件,這些文件(啟動(dòng)腳本文件)用來定義BASH環(huán)境,如果希望建立標(biāo)準(zhǔn)的別名,或者希望設(shè)置各種
shell變量,就應(yīng)該在bash啟動(dòng)文件中進(jìn)行設(shè)置。和Bash的環(huán)境設(shè)定有關(guān)的文件有/etc/profile(主要)/etc/profile.d/*.sh(主要)$HOME/.bash_profile(主要)$HOME/.bash_login$HOME/.profile$HOME/.bash_logout(主要)$HOME/.bashrc(主要)/etc/bashrc10/8/202218/34LINUX中BASH環(huán)境變量的設(shè)定順序登入(login)交互式時(shí)(從字符終端或X
Window登錄)先執(zhí)行/etc/profile(包括/etc/profile.d/*.sh)接著bash會(huì)檢查使用者的自家目錄中,是否有.bash_profile或者.bash_login或者.profile,若有,則會(huì)執(zhí)行其中一個(gè),執(zhí)行順序?yàn)椋?bash_profile最優(yōu)先.bash_login其次.profile最后(執(zhí)行最先碰到的一個(gè),前面的設(shè)定會(huì)被后面的覆蓋)啟動(dòng)后讀取.bashrc10/8/202219/34LINUX中BASH環(huán)境變量的設(shè)定順序各文件用途說明1、/etc/profile由root所控制,用來設(shè)定適合全體使用者的shell環(huán)境
2、若使用者自
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年區(qū)域醫(yī)療服務(wù)承包協(xié)議
- 2024醫(yī)藥產(chǎn)品研發(fā)與銷售代理合同
- 2024年企業(yè)知識(shí)產(chǎn)權(quán)管理與運(yùn)用合同
- 2024員工福利外包服務(wù)合同
- 2024年度游戲委托開發(fā)與運(yùn)營(yíng)合同
- 2024年度新能源汽車電池制造與回收合同
- 2024城市配送車輛購置擔(dān)保合同
- 2024年產(chǎn)定做加工協(xié)議
- 2024年品牌授權(quán)使用合同(服裝業(yè))
- 2019年西藏開發(fā)投資集團(tuán)有限公司招聘試題及答案解析
- HAY崗位管理體系構(gòu)建
- 2023年中級(jí)經(jīng)濟(jì)師考試真題及答案
- SB/T 10895-2012鮮蛋包裝與標(biāo)識(shí)
- GB/T 9115-2010對(duì)焊鋼制管法蘭
- GB/T 2423.3-2006電工電子產(chǎn)品環(huán)境試驗(yàn)第2部分:試驗(yàn)方法試驗(yàn)Cab:恒定濕熱試驗(yàn)
- GB/T 23221-2008烤煙栽培技術(shù)規(guī)程
- GB/T 16900-2008圖形符號(hào)表示規(guī)則總則
- 城市綠地系統(tǒng)規(guī)劃 第9章 工業(yè)綠地規(guī)劃
- 遼寧省遼南協(xié)作校2022-2023學(xué)年高二上學(xué)期期末考試語文答案 Word版含解析
- 中職英語統(tǒng)考復(fù)習(xí)講課教案
評(píng)論
0/150
提交評(píng)論