一般來說在程式編譯的中,無論是c、c++,首先要把原始檔編譯成中間**檔案,在windows下是 .obj 檔案(unix下是 .o 檔案),即 object file,這個動作叫做編譯(compile)。然後再把大量的object file合成執行檔案,這個動作叫作鏈結(link)。
nmake(microsoft program maintenance utility)的命令列語法
makefile的組成部分包括:描述語句(description block),inference rules(推導規則),巨集和指令(directive)。描述語句就是dependent lines和command lines的組合;inference rules就是預先定義好的或使用者自己定義的依賴關係和關聯命令;巨集就不用說了吧;指令就是內定的一些可以被nmake識別的控制命令,提供了很多有用的功能。
makefile中的命令要以[tab]開頭,如下是乙個簡單的例子,其中main.cpp中用到add.cpp中的函式。
main.exe:main.obj add.obj
link main.obj add.obj
main.obj:main.cpp add.h
add.obj:add.cpp
注意:命令link前一定要有[tab]空格。
vc帶的編譯器名字叫cl.exe,它有這麼幾個與標準程式庫有關的選項: /ml、/mld、/mt、/mtd、/md、/mdd。這些選項告訴編譯器應用程式想使用什麼版本的c標準程式庫。/ml(預設選項)對應單執行緒靜態版的標準程式庫(libc.lib);/mt對應多執行緒靜態版標準庫(libcmt.lib),此時編譯器會自動定義_mt巨集;/md對應多執行緒dll版(導入庫msvcrt.lib,dll是msvcrt.dll),編譯器自動定義_mt和_dll兩個巨集。後面加d的選項都會讓編譯器自動多定義乙個_debug巨集,表示要使用對應標準庫的除錯版,因此/mld對應除錯版單執行緒靜態標準庫(libcd.lib),/mtd對應除錯版多執行緒靜態標準庫(libcmtd.lib),/mdd對應除錯版多執行緒dll標準庫(導入庫msvcrtd.lib,dll是msvcrtd.dll)。
關於cl命令的幾個常用引數:
/d定義巨集
/od 使編譯器不做,一般利於除錯
/zi 包含除錯資訊
/zp? 其中問號表示數字,表示預設的對齊方式,如zp1表示按1個位元組對齊 zp8按8位元組對齊, 其中對齊方式可以在程式中如下使用
//定義對齊方式
#pragma pack(push, 8)
/*類或結構體等的定義*/
#pragma pop(pop)
.bat批處理命令語法可參考
參考《跟我一起寫makefile》
命令列編譯C (Linux下 Windows下)
一般而言,對於 c 程式編譯有以下4個階段 參考 an introduction to gcc gcc 最開始的時候是 gnu c compiler,就是乙個 c 編譯器。但是後來因為這個專案裡邊整合了更多其他不同語言的編譯器,gcc 就代表 the gnu compiler collection,...
Qwt在windows下的安裝與編譯
qwt是基於qt的一款繪製二維圖形的開源專案。用它可以很方便的繪製各種曲線,柱狀圖和頻率圖。網上有很多qwt的安裝攻略,我都嘗試過,這裡只總結一下自己的心得。安裝qwt按照qwt提供的安裝文件就完全可以搞定,如果出現預設庫或檔案的話說明系統相關的軟體沒有裝好 主要是qt和windows圖形開發庫 這...
Agg在Windows下的編譯與使用
agg在windows下的編譯與使用 flyfish agg簡介 agg anti grain geometry 是乙個開源免費的圖形庫。主要是編譯稱為lib庫,然後提供給其他程式使用 環境 win10 x64 visual studio 2013 字符集 unicode 函式替換 sprintf ...