已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux培訓(xùn)講義,基于Ubuntu,RHEL 1. 系統(tǒng)配置,makefile,教學(xué)內(nèi)容,Linux下開發(fā)語(yǔ)言的選擇 Linux的環(huán)境變量 Java環(huán)境配置 C+環(huán)境配置 開發(fā)環(huán)境選擇 IDE vs 編輯器 makefile,Linux開發(fā)語(yǔ)言的選擇,主流的可選擇的主流開發(fā)語(yǔ)言清單:,Linux開發(fā)語(yǔ)言的選擇,我們會(huì)用到的語(yǔ)言: c Linux的母語(yǔ) c+ 高效的兼容c的面向?qū)ο笳Z(yǔ)言 Java “跨平臺(tái)設(shè)計(jì)良好的oo語(yǔ)言” Python 跨平臺(tái)用來替代傳統(tǒng)腳本的腳本 bash(shell) 最古老的腳本語(yǔ)言,Linux的環(huán)境變量,什么是環(huán)境變量 環(huán)境變量一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)。 常用的環(huán)境變量 PATH 操作系統(tǒng)用來搜索文件的默認(rèn)路徑 PWD 當(dāng)前工作目錄,Linux的環(huán)境變量,設(shè)置環(huán)境變量 export 命令 例子:export test=value /etc/profile 啟動(dòng)計(jì)算機(jī)生效 .bashrc文件 登錄之后生效 顯示環(huán)境變量 顯示全部環(huán)境變量:env命令 顯示某個(gè)環(huán)境變量:echo變量名,Java環(huán)境配置,下載JDK 使用1.6+比較好。 解壓到指定目錄 設(shè)置環(huán)境變量:三個(gè) JAVA_HOME=/data/Development/java/ PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH 測(cè)試:java -v,hello world 注意把新添加的JDK的bin目錄追加在$PATH的最前面,這樣當(dāng)系統(tǒng)中安裝有多個(gè)JDK版本時(shí),程序會(huì)優(yōu)先搜尋排在最前面的JDK版本。,C+環(huán)境配置,使用包管理器安裝 yum或者apt-get安裝。 yum: yum install gcc gcc-c+ apt-get: apt-get intall build-essential 自己編譯一個(gè)gcc/g+ 不推薦,時(shí)間太長(zhǎng),容易出錯(cuò) 測(cè)試環(huán)境:gcc v,g+ -v,hello world,開發(fā)環(huán)境選擇 IDE vs 編輯器,可選的IDE: eclipse +CDT,pyDev等。 code:blocks codelite anjunta Kdevelop 我們主要以eclipse為主。,開發(fā)環(huán)境選擇 IDE vs 編輯器,eclipse+CDT的安裝方法 下載eclipse for linux 解壓到指定位置 下載CDT,放到eclipse的目錄下 配置eclipse環(huán)境建立連接,代碼格式等 測(cè)試環(huán)境Java工程,C+工程,開發(fā)環(huán)境選擇 IDE vs 編輯器,可選的編輯器: emacs vim gedit Kate 我們主要以vim和gedit為主,makefile,回顧:C/C+代碼是怎么變成程序的 預(yù)處理 編譯 連接 生成匯編代碼 生成機(jī)器碼,makefile,問題提出: 當(dāng)一個(gè)工程有很多源文件 文件依賴,編譯繁瑣,需要重新編譯很多 gcc/g+編譯器 make工具 makefile,makefile,依賴關(guān)系 依賴關(guān)系定義了最終應(yīng)用程序的每個(gè)文件和源文件之間的關(guān)系。 在makefile中這些規(guī)則的寫法如下: target: file1 file2 注意冒號(hào)后面的空格,文件之間的空格,makefile,依賴關(guān)系例子: myapp: main.o 2.o 3.o main.o: main.c main.c a.h 2.o: 2.c a.h b.h 3.o: 2.c b.h c.h,makefile,規(guī)則 規(guī)則定義了目標(biāo)的生成方式,上面的例子中,要怎樣重新生成2.o呢?正常情況下只需要用 gcc -c 2.c 但是如果需要指定頭文件目錄,或者為了今后的調(diào)試需要設(shè)置符號(hào)信息選項(xiàng)該怎么做? 注意:規(guī)則所在的行必須用制表符tab開頭,否則會(huì)導(dǎo)致make錯(cuò)誤。,makefile,make命令的選項(xiàng)和參數(shù) k當(dāng)make命令遇到錯(cuò)誤的時(shí)候繼續(xù)執(zhí)行 n讓make輸出將要執(zhí)行的操作步驟 f指定makefile的文件名,makefile,簡(jiǎn)單的makefile myapp: main.o 2.o 3.o gcc -o myapp main.o 2.o 3.o main.o: main.c a.h gcc -c main.c 2.o: 2.c a.h b.h gcc -c 2.c 3.o: 3.c b.h c.h gcc -c 3.c make -f Makefile,makefile,make處理makefile文件中的依賴關(guān)系,確定需要?jiǎng)?chuàng)建的文件以及創(chuàng)建順序。雖然上面把myapp放在最前面,但是make能判斷出創(chuàng)建文件的正確順序。它調(diào)用在規(guī)則部分給出的命令用來創(chuàng)建相應(yīng)的文件,同時(shí)會(huì)在執(zhí)行時(shí)在屏幕上將命令顯示出來。 測(cè)試:改變一個(gè)源文件看看makefile能否處理這個(gè)情況。,makefile,makefile中的注釋 makefile中的注釋以#開頭,一直延續(xù)到這一行的結(jié)束,同C/C+的行注釋/類似。,makefile,問題的產(chǎn)生: 上面基本上已經(jīng)介紹了makefile的全部?jī)?nèi)容,但是在實(shí)際項(xiàng)目使用中還有一定的問題,比如項(xiàng)目中需要在不同的平臺(tái)上更換編譯器,項(xiàng)目目錄結(jié)構(gòu)發(fā)生變化等。 宏: 定義:macro=value 取消:macro= 引用:$macro,makefile,宏的作用: 設(shè)置編譯器的選項(xiàng) 消除編譯過程中的硬編碼(hard code) 使用宏的makefile例子,makefile,all: myapp #which compiler CC = gcc #where are include files kept INCLUDE = . #options for development CFLAGS = -g -Wall -ansi #options for release #CFLAGS = -Wall -ansi myapp: main.o 2.o 3.o $CC -I$INCLUDE -o myapp main.o 2.o 3.o main.o: main.c a.h $CC -I$INCLUDE -c main.c 2.o: 2.c a.h b.h $CC -I$INCLUDE -c 2.c 3.o: 3.c b.h c.h $CC -I$INCLUDE -c 3.c,makefile,makefile的內(nèi)置宏 $?: 列出當(dāng)前目標(biāo)所依賴的文件列表中比當(dāng)前目標(biāo)文件還要新的文件 $: 當(dāng)前目標(biāo)的名字 $: 當(dāng)前依賴文件的名字 $*: 不包括后綴名的當(dāng)前依賴文件的名字,makefile,多個(gè)目標(biāo) 通常需要制作的目標(biāo)文件不止一個(gè),或者希望將多個(gè)規(guī)則集中到一處執(zhí)行,通過擴(kuò)展makefile即可達(dá)到這一目的。 例子: 給上面的例子增加兩個(gè)選項(xiàng): clean用來清除不需要的目標(biāo)文件 Install用來將編譯好的目標(biāo)放到指定目錄,makefile,INSTDIR = /usr/local/bin #where are include files kept INCLUDE = . #options for development CFLAGS = -g -Wall -ansi #options for release #CFLAGS = -Wall -ansi myapp: main.o 2.o 3.o $CC -I$INCLUDE -o myapp main.o 2.o 3.o main.o: main.c a.h $CC -I$INCLUDE -c main.c 2.o: 2.c a.h b.h $CC -I$INCLUDE -c 2.c 3.o: 3.c b.h c.h $CC -I$INCLUDE -c 3.c clean: -rm main.o 2.o 3.o install: if -d $INSTDIR; then cp myapp $INSTDIR; CHMOD a+x $INSTDIR/myapp; chmod og-w $INSTDIR/myapp; echo “Installed in $INSTDIR;“ else echo “$INSTDIR does not exist.“; fi;,makefile,注意事項(xiàng): all只定義了myapp這一個(gè)目標(biāo),如果在執(zhí)行make的時(shí)候沒有指定目標(biāo),make的默認(rèn)行為就是創(chuàng)建第一個(gè)目標(biāo)all 增加了兩個(gè)新的目標(biāo)clean和install rm命令用-開頭,意義是忽略rm命令的執(zhí)行結(jié)果 clean命令沒有依賴項(xiàng),在執(zhí)行make clean的時(shí)候,該項(xiàng)目對(duì)應(yīng)的規(guī)則總會(huì)被執(zhí)行。,makefile,install目標(biāo)依賴于myapp,make知道必須首先創(chuàng)建myapp,然后才能執(zhí)行制作該目標(biāo)的所需要的其他命令。 用于制作install目標(biāo)的規(guī)則由幾個(gè)shell腳本命令組成。由于make命令在執(zhí)行規(guī)則時(shí)會(huì)調(diào)用一個(gè)shell,并且會(huì)針對(duì)每個(gè)命令調(diào)用一個(gè)shell,這時(shí)候必須在上面每行代碼的結(jié)尾加上一個(gè)反斜杠。讓所有的shell腳本命令在邏輯上處于同一行,并作為一個(gè)整體只傳遞給一個(gè)shell執(zhí)行。這個(gè)命令用開頭,表示make在執(zhí)行這些規(guī)則之前不會(huì)在標(biāo)準(zhǔn)輸出上顯示命令本身。,makefile,目標(biāo)install順序執(zhí)行多個(gè)命令使目標(biāo)安裝到指定位置。本例中,在執(zhí)行shell命令過程中,make不檢測(cè)上一條命令是否成功。如果需要檢測(cè)上調(diào)命令的執(zhí)行結(jié)果,則可以將這些命令用&連接起來。,makefile,內(nèi)置規(guī)則 make命令本身帶有大量的內(nèi)置規(guī)則,他們可以極大的簡(jiǎn)化makefile文件的內(nèi)容。 例子 在源文件目錄下執(zhí)行: make foo,makefile,make有自己的內(nèi)置規(guī)則,內(nèi)置規(guī)則也叫做推導(dǎo)規(guī)則,推導(dǎo)規(guī)則使用一些宏定義,給變量重新賦值則可改變其默認(rèn)行為。 例子: make cc=gcc CFLAGS=“-Wall -g” foo make p可以用來輸出make的所有內(nèi)置規(guī)則 因?yàn)檫@些內(nèi)置規(guī)則,可以將makefile中用于制作目標(biāo)的規(guī)則去掉,只需要指定依賴關(guān)系,這樣就可以簡(jiǎn)化makefile。,makefile,運(yùn)用內(nèi)置規(guī)則的例子: myapp: main.o 2.o 3.o main.o: main.c a.h 2.o: 2.c a.h b.h 3.o: 3.c b.h c.h,makefile,后綴和模式規(guī)則 內(nèi)置規(guī)則在使用的時(shí)候文件都是帶有后綴的,所以給出帶某個(gè)特定后綴的文件的時(shí)候,make知道用那個(gè)規(guī)則來創(chuàng)建帶有另外一個(gè)不同后綴的文件。.c.o 增加一條新的后綴規(guī)則: 在makefile中增加一條語(yǔ)句,告訴make這個(gè)新的后綴名。然后就可以用這個(gè)新的后綴名來定義規(guī)則。,makefile,后綴語(yǔ)法 利用這個(gè)規(guī)則可以使新創(chuàng)建的文件保留源文件的前半部分但用新的后綴名替換老的后綴名。 例子:將cpp文件轉(zhuǎn)換成.o文件 .SUFFIXES: .cpp .cpp.o $CC -xc+ $CFLAGS ISINCLUDE -c $,makefile,上面的特殊關(guān)系.cpp.o告訴make,將.cpp的文件轉(zhuǎn)換成.o文件。使用這條規(guī)則的重點(diǎn)在于記住宏$將被擴(kuò)展成起始文件(包含老的后綴名)的名字。 -xc+告訴make這個(gè)文件是c+文件,makefile,通配符語(yǔ)法可以用來匹配文件名,而不是依賴于文件的后綴名。 通配符定義 例子: %.cpp: %.o $CC -xc+ $CFLAGS -I$INCLUDE c $,makefile,make管理靜態(tài)庫(kù) make用特殊的語(yǔ)法來管理庫(kù)函數(shù): lib(file.o) 上面這條語(yǔ)句的作用是把文件file.o增加到lib.a中。make用一個(gè)內(nèi)置規(guī)則來管理庫(kù)函數(shù),這個(gè)規(guī)則常見形式如下: .c.a $CC -c $CFLAGS $ $AR $ARFLAGS $ $*.o,makefile,上面的宏的默認(rèn)值分別是ar和選項(xiàng)rv。這個(gè)語(yǔ)法告訴make,必須使用兩條規(guī)則才能從.c文件轉(zhuǎn)換成.o文件。 第一條規(guī)則編譯源文件 第二條規(guī)則是使用ar將新的目標(biāo)文件增加到靜態(tài)庫(kù)當(dāng)中。 例子:產(chǎn)生靜態(tài)庫(kù),makefile,all: myapp #which compiler 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 = -Wall -ansi #static libs MYLIB = mylib.a myapp: main.o $MYLIB $CC -o myapp main.o$MYLIB(3.o) main.o: main.c a.h 2.o: 2.c a.h b.h 3.o: 3.c b.h c.h clean: -rm main.o 2.o 3.o install: myapp if -d $INSTDIR; then cp myapp $INSTDIR; CHMOD a+x $INSTDIR/myapp; chmod og-w $INSTD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年功能性食品與保健品項(xiàng)目投資計(jì)劃書
- 2026年變壓器能效提升項(xiàng)目營(yíng)銷方案
- 2026年候鳥式養(yǎng)老旅游項(xiàng)目營(yíng)銷方案
- 武漢工程大學(xué)體育理論考試試題與答案網(wǎng)球籃球足球基礎(chǔ)理論模板
- 2026湖北事業(yè)單位聯(lián)考監(jiān)利市招聘178人備考題庫(kù)附參考答案詳解(典型題)
- 2026重慶大足區(qū)規(guī)劃和自然資源局食堂白案廚師、幫廚招聘2人備考題庫(kù)含答案詳解(培優(yōu)a卷)
- 2026湖北恩施供銷好農(nóng)友現(xiàn)代農(nóng)業(yè)有限公司市場(chǎng)營(yíng)銷部人員招聘?jìng)淇碱}庫(kù)帶答案詳解(綜合卷)
- 2026年元宇宙地產(chǎn)與虛擬店鋪項(xiàng)目商業(yè)計(jì)劃書
- 2026年合成生物學(xué)AI設(shè)計(jì)項(xiàng)目可行性研究報(bào)告
- 2026福建中醫(yī)藥大學(xué)高層次人才招聘71人備考題庫(kù)附參考答案詳解(預(yù)熱題)
- 礦山各類安全標(biāo)識(shí)牌規(guī)范及設(shè)計(jì)標(biāo)準(zhǔn)
- 2025年大學(xué)《法醫(yī)學(xué)-法醫(yī)毒物分析》考試模擬試題及答案解析
- 中國(guó)海洋石油有限公司油氣田跟蹤經(jīng)濟(jì)評(píng)價(jià):體系構(gòu)建與實(shí)踐應(yīng)用
- 銷售業(yè)績(jī)統(tǒng)計(jì)圖表模板(銷售數(shù)據(jù))
- DLT 593-2016 高壓開關(guān)設(shè)備和控制設(shè)備
- 省食品藥品保健品化妝品檢驗(yàn)院質(zhì)量手冊(cè)
- ??低晿寵C(jī)攝像機(jī)檢測(cè)報(bào)告
- 天然氣酸性組分的脫除
評(píng)論
0/150
提交評(píng)論