Windows下的命令編譯與Makefile

2021-06-02 02:44:01 字數 1360 閱讀 6370

一般來說在程式編譯的中,無論是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 ...