標籤:
之所以需要另外設定" 執行時需要="" mspdb60.dll,而它被安裝於="" c:\msdev\common\msdev98\bin="" 之中。<="" p><p>如果你寫的程式不只是單純的="" 程式,還用到了="" mfc,一樣可以在="" console="" mode="" 下編譯,這時候你的環境變數應該如此設定:<="" mfc\include="" 和="" mfc\lib,就可以讓編譯器和連接器找到="" mfc="" 的="" libraries。如果你還需要用到="" atl,就得在="" 環境變數中再加上="" c:\msdev\vc98\atl\include。<="" files\microsoft="" studio下,所以改寫批次檔如下:<="" studio\vc98\bin;d:\program="" studio\common\msdev98\bin="" studio\vc98\include;d:\program="" studio\vc98\mfc\include="" studio\vc98\lib;d:\program="" studio\vc98\mfc\lib<="" p><p>然後運行cmd,將以上設定複製粘貼到滑鼠閃爍處。如果想要確認路徑更改正確,可以鍵入set命令查看。<="" p><p>註:這樣的環境變數修改,僅對本次命令列視窗有效,因為它是一個虛擬設備。如果想要每次進入時,不做這個工作。可以運行vcvars32.bat然後設定你的環境變數。為了不影響vc++的原本設定方便Integration Environment的使用,我並沒有實際操作,一個簡單的複製粘貼也不見得麻煩。另外還可以在我的電腦-屬性-進階-環境變數裡直接修改,這個修改也是永久性的。到這裡,路徑就設定好了。下面試操作一下:<="" p><p>我在f:\盤儲存了一個test.cpp檔案作為測試檔案。檔案內容如下:<="" #include="" <iostream.h>="" void="" main()="" {="" cout<<"hello"<<endl;="" }="========================================
使用cd命令把當前命令列視窗路徑切換到F:\>,然後執行cl" test.cpp命令,在f:\盤路徑下產生了兩個檔案,test.obj和test.exe。然後再運行test.exe,就可以看到結果了(輸出hello)。<="" p><p>下面再舉一個例子,也就是下面要學習的makefile檔案。測試檔案名為mypath.mak(你可以任意取名),依舊儲存在當前路徑下。<="" all: ="" ="" @echo ="" $(path)="=========================
運行命令nmake" mypath.mak,你可以看到輸出結果為你剛才設定過的路徑(我的結果是d:\program="" studio\common\msdev98\bin)。<="" p><p>2.產生自己的makefile檔案<="" p><p>下面是我在網上找到的一個簡單的例子及其解說(<a="" target="_blank" href="http://www.readygo.com.cn/it-1104697.html" >http:="" www.readygo.com.cn="" it-1104697.html<="" a>)<="" 下面來看一個簡單的例子(以下內容均以win32平台為例): ="" 檔案名稱:makefile ="" 1. ="" # ="" makefile ="" 2. ="" this ="" is ="" a ="" example ="" of ="" make ="" file ="" 3. ="" all:a1 ="" a2 ="" 4. ="" all! ="" 5. ="" a1: ="" 6. ="" a1! ="" 7. ="" a2: ="" 8. ="" a2! ="" ="" 運行make後,結果如下: ="" 現在讓我們來分析一下這個簡單的規則檔案。="" ="" ="" 第1、2行不用說,一眼就可以看出是注釋。在make規則檔案中,注釋是以“#”開始,是行注釋,和c++中的“="" ”功能一樣。不過你可不能把它放到其它的語句之後,否則就錯了。第3行就是規則開始了!all:a1 ="" a2一行中,規則的名字就是all,它通常是目標名(target)。一條規則可以有不止一個名字,像這一行,你也可以把它寫成all ="" all2:a1 ="" a2。這時,規則就有了兩個名稱—all和all2。當然,還可以有更多,都看你自己。後面的5、7兩行也分別是兩條規則的起始。在“:”之後的,就是依賴項。在這一行裡,依賴項有兩個,分別是a1和a2。這些依賴項可以是其它的規則名(目標名),也可以是檔案名稱。依賴和目標之間的關係就是“依賴關係”。一條規則中,可以有零個(像後面的兩條規則)、一個或多個依賴。第4行@echo ="" all!是命令列。它是執行all規則時要執行的命令。要注意的是,一條規則內的命令要以tab為一行的起始,以表示命令是屬於一個規則。一條規則也可以有多條命令,每條命令佔一行(要以tab開頭)。至於可以使用哪些命令,這完全取決於你使用的os和shell。="" ="" 當執行make時,它會找到第一條規則。然後,make就會檢查依賴和目標之間的關係。如果目標比依賴舊,就執行規則,以更新目標。執行完規則就結束。如何判定目標和依賴的新舊呢?如果目標(檔案)不存在,目標的時間就為0;如果目標(檔案存在),目標的時間就為檔案的修改時間。如果依賴項是一條規則,就執行依賴的規則(這裡是一個遞迴),然後依賴的時間就是當前最新時間;如果是一個存在的檔案,就為檔案的修改時間,否則就報錯。之後,就可以比較目標和依賴之間的關係。不過,有一點特殊的是,在沒有依賴項時,依賴的時間為1。="" 在這個例子中,make先找到規則“all”,發現目標不存在,所以目標的時間為0;然後在尋找依賴“a1”,結果“a1”不存在;於是,執行規則“a1”。“a1”不存在,所以它的時間為0,而“a1”沒有依賴,它的依賴時間為1;1>0,所以,執行規則“a1”。然後返回規則“all”,再檢查依賴“a2”。“a2”執行過程同“a1”。這時,“all”的目標時間為0,依賴時間為最新時間。於是,執行規則“all”的命令。="" 當然,大家也可以指定一條規則讓make執行,比如:make ="" a1這個命令就是告訴make程式不去找第一條規則,而是規則“a1”來執行。並且我們還可以一次執行多條規則,比如:執行make ="" a1 ="" a2就會連續執行“a1”、“a2”兩條規則。 ="" p><p> ="" ok,雖然講得很混亂,但也費了我半天的力氣。大家應該有一點瞭解make規則的執行過程了吧。 ="=============================================
依賴的基本寫法如下:" target:dependence="" ="" command<="" target可以是檔案名稱。dependence可以是其它的target名或檔案名稱。command就是作業系統所啟動並執行命令列。 ="" 變數 ="" ="" 一個make規則檔案有這些內容就已經基本可以工作了。可是,當我們在編譯一個程式時,如果有些內容要反覆用到,每次都要寫一長串的話,是很麻煩的。於是,make就引入了宏這個概念(其實也可以看成簡單的指令碼語言)。 ="" 宏變數的定義如下: ="" var1 =" " macro ="" demo! ="" var1就是變數名,它的值就是“this ="" demo!” ="" 如果我們要使用這個變數的值,那隻有通過$這個運算子才行—$(var1)代表的就是“this ="" demo!”。 ="" 如下makefile ="" 3. ="" $(var1) ="" 結果輸出: ="" 使用者在執行命令列時也可以定義宏變數。其形式如下: ="" all ="" var1="”this " test” ="" 執行結果為: ="" test ="" 我們不僅可以使用自訂變數,還可以通過這種方式使用系統內容變數。這樣可以大大方便我們建議靈活的規則。如下makefile ="" 2. ="" $(windir) ="" c:\windows="" (注意:makefile中的變數是大小寫敏感的) ="=========================================
下面介紹makefile檔案的一些內建變數:
==========================================" [email protected]代表規則中的目標名(也就是規則名)。 ="" $<代表規則中的依賴項目。注意,它只代表規則所有依賴項目中的第一項! ="" 其它還有: ="" $^代表規則中所有的依賴項目。 ="" $?代表規則中時間新於目標的依賴項目。 ="" 不僅如此,還可以給這些特殊的變數加一些限制。 ="" 如: ="" 在規則 ="" debug="" out.exe ="" : ="" out.obj ="" 中,[email protected]代表debug="" out.exe,而$(@d)代表目錄名debug,$(@f)代表檔案名稱out.exe。其它如$(<d)、$(<f)、$(^d)、$(^f)、$(?d)、$(?f)與此類似。 ="============================================
舉個例子說明,下面是原始makefile檔案內容:
==============================================" myprog="" foo.o="" bar.o="" ="" gcc="" -o="" foo.c="" foo.h="" bar.h="" -c="" bar.c="" objs="foo.o" cc="gcc" cflags="-Wall" -g="" $(objs)="" $(cc)="" $^="" [email protected]="" $(cflags)="" $<-o="">
windows 下使用makefile(二)---- 編譯