- 1. 準備工作:
程式:
MinGW-3.1.0-1.exe windows下的gcc,編譯c語言的工具
: http://umn.dl.sourceforge.net/sourceforge/mingw/MinGW-3.1.0-1.exe
make 按照makefile規則編譯器的工具
位置 :window/system32下,如果沒有可以在 http://www.mingw.org/download.shtml找到
配置環境:
環境變數配置 :
控制台> 系 統 >進階 >環境變數 >系統變數 >添加MinGW 安裝目錄下的bin目錄到path中去,或者命令列下運行:set PATH= MinGW 安裝目錄下的bin目錄
把C:\WINDOWS\system32用上邊方法添加到path中以找到make.exe
建立四個檔案:
//---------------------------Main.c : ---------------------------//
#include "stdio.h"
main()
{
func();
printf("this is main\n");
getch();
}
//---------------------------func.c : ---------------------------//
#include "stdio.h"
func()
{
printf("this is func\n");
getch();
}
一個空檔案,檔案名稱為makefile或者Makefile,這個檔案名稱是必須的因為make預設尋找該檔案
建立compile.bat檔案
內容為:
make
cmd
- 2. 編寫makefile
樣本:
test:main.o func.o
gcc -o test main.o func.o
func.o:func.c
gcc -c func.c
main.o:main.c
gcc -c main.c
1行:產生test可執行檔,它的依賴於main.o func.o,也就是說產生test你得先產生它們,
2行:gcc前邊必須是tab也就是7個空格,表示編譯產生test
後邊是依賴項的建置規則
然後運行compile.bat就可以產生test.exe檔案了,同時會附加產生func.o和main,o兩個中間代碼的檔案,類似於VC中的obj檔案
- 3. makefile的編寫規則
可以參看:http://www.stlchina.org/twiki/bin/view.pl/ScriptProgram/LearnMakefile
- 4. gcc的參數
同VC,TC等編譯器不同,GCC其實是可以很方便的在提示符下編譯器的。GCC在提示符下編譯器,並沒有如同VC那樣的冗長而晦澀的編譯參數。相反,卻有著比VC更靈活且簡短的參數。
不得不承認,不懂GCC編譯參數的人,確實會損失一些GCC的強大功能。所以,我下面簡單介紹一下GCC的一些基本編譯參數。這裡,我以C編譯器為例。
編譯二進位代碼
$gcc -c yours.c -o yours.o |
使用這段指令,GCC將會把yours.c編譯成yours.o的二進位代碼。其中,yours.o就類似於VC,TC中的.obj文檔。
編譯最簡單的小程式。
通過這條指令,GCC將會把yours.c原始碼編譯成名為yours的可執行程式。當然,您也可以將yours.c改成我們剛才介紹的yours.o檔案。這樣,gcc將使用編譯剛才編譯好的二進位文檔來連結程式。這裡,格式的特點是,-o 後面是一串檔案清單,第一個參數是所編譯器的檔案名稱,從第二個開始,就是您編譯和串連該可執行程式所需要的二進位文檔或者原始碼。
編譯時間將自己的標頭檔目錄設為預設標頭檔目錄
$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o |
這條指令中的-I參數將會把Your_Include_Files_Document_Path添加到你預設的標頭檔目錄中。這樣您將可以使用 #include <your_include.h>來匯入標頭檔。
編譯時間使用自己的靜態庫存放目錄
$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o |
這條指令將會讓GCC在串連時除了在預設Lib存放目錄中搜尋指定的靜態庫以外,還會在Your_Lib_Files_Document_Path中搜尋。
編譯時間使用靜態串連庫
$gcc -lyour_lib -o yours yours.o |
這條指令將會讓GCC在串連時把 libyour_lib.a中您所用到的函數串連到可執行程式中。此處注意,GCC所使用的靜態串連庫是lib*.a格式的。在串連時,只且僅需要提供*的內容就可以了。
編譯時間使用最佳化
$gcc -O2 -c yours.c -o yours.o |
使用最佳化方式編譯器,其中除了-O2以外,還有-O3 -O1等等。他們代表不同的最佳化等級。最常用的,是-O2最佳化。當然,還有針對特殊CPU的最佳化,這裡就不介紹了。
編譯時間顯示所有錯誤和警告資訊
$gcc -Wall -c yours.c -o yours.o |
GCC在預設情況下,將對一些如變數申請未使用這樣的問題或者申請了沒有給予初始值的問題忽略。但是,如果使用了-Wall參數,編輯器將列出所有的警告資訊。這樣,您就可以知道您的代碼中有多少可能會在其他動作系統下出錯的地方了。(用這個指令看看你的代碼有多少地方寫的不怎麼合適。)
編譯串連時,加入調試代碼
正如同VC有debug編譯模式一樣,GCC也有debug模式。添加了-g 參數編譯的可執行程式比普通程式略為大一些,其中添加了一些調試代碼。這些代碼將被gdb所支援。
串連時縮小代碼體積
這個參數,似乎我沒有在Unix環境下看到過。也不知道具體什麼作用。因為有人說Visual-MinGW產生的程式碼小,於是研究了一下她的編譯參數,發現release模式的編譯參數就加了這一項。貌似編譯後的代碼的確縮小了很多。
獲得協助
這條指令從意思上就能看出,獲得gcc的協助資訊。如果您有什麼特殊需要,也許這個指令能幫上點小忙。
以上轉自:http://blog.csdn.net/zhanghan3/archive/2006/10/14/1334308.aspx
以下是要注意的事項:
1:上面的連結地址不可用,最新mingw的為:http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/
2: 安裝之後,在mingw\bin下面並不會存在make.exe檔案,需要更改mingw32-make.exe為 make.exe