在Linux下,Kris是
傾向于在終端中使用gcc和g++來(lái)編譯C/C++的,在Windows下相信很多人都是選擇臃腫的Visual
Studio,,我亦不免如此。但是,,我希望在Windows下也能像Linux下一樣簡(jiǎn)潔編程,,于是開(kāi)始了我的Windows下的C/C++命令行編譯環(huán)
境打造之路。 幾乎沒(méi)有人會(huì)否認(rèn)集成開(kāi)發(fā)環(huán)境 (IDE)(例如,,Visual Studio,,NetBeans,Eclipse)所提供的能使編程工作變得相當(dāng)簡(jiǎn)單的諸多功能,。但,,還是說(shuō)說(shuō)命令行編譯的好處吧。 1,、偏愛(ài)最簡(jiǎn)單的生成 2,、希望揭開(kāi) IDE 處理源代碼文件的方法的秘密 3、深入了解計(jì)算機(jī)語(yǔ)言并得到擴(kuò)展 事實(shí)上,,使用命令行工具編譯的感覺(jué)將證明很有幫助,。 怎 么打造Windows下的C/C++命令行編譯環(huán)境呢?使用Cygwin在Windows上模擬Linux環(huán)境,,然后利用gcc/g++,,顯然這也是復(fù)雜 的折騰。既然我已經(jīng)裝了Visual Studio,,那么我應(yīng)該好好利用其cl編譯器,。OK,,步驟記錄如下(這里說(shuō)明一下,我的環(huán)境是Windows 7 + Visual Studio 2010,,其中VS 2010安裝位置是D盤(pán)): 1,、修改環(huán)境變量 在系統(tǒng)屬性-高級(jí)-環(huán)境變量-用戶變量中: 編輯PATH增加cl編譯器的路徑D:\Program Files\Microsoft Visual Studio 10.0\VC\bin以及MSPDB60.DLL的路徑D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE,用分號(hào)分隔,。 新建變量INCLUDE:D:\Program Files\Microsoft Visual Studio 10.0\VC\include 新建變量LIB:D:\Program Files\Microsoft Visual Studio 10.0\VC\lib 2,、 在命令提示符(CMD)中運(yùn)行cl,,若出錯(cuò)提示LINK : fatal error LNK1104: 無(wú)法打開(kāi)文件“kernel32.lib”,,則把C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib目錄下的kernel32.lib拷貝到D:\Program Files\Microsoft Visual Studio 10.0\VC\lib目錄下。 3,、試試效果,,在CMD中輸入cl main.cpp,其中main.cpp內(nèi)容如下: 復(fù)制內(nèi)容到剪貼板 Code
#include #define _(_) putchar(_); int main(void){int i = 0;_( ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++i)_(++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++i)_(++++++++++++++ i)_(--++i)_(++++++i)_(------ ---------------------------- ---------------------------- ---------------------------- ---------------------------- ----------------i)_(-------- ----------------i)_(++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++i) _(----------------i)_(++++++ i)_(------------i)_(-------- --------i)_(---------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ------i)_(------------------ ---------------------------- i)return i;} 編譯結(jié)束之后,,運(yùn)行main.exe結(jié)果會(huì)是什么呢,?Oops,傳說(shuō)中的Hello World 哎,! 附錄cl編譯器命令的簡(jiǎn)單用法: 引用內(nèi)容
(1) cl 直接生成exe文件 多文件編譯 在main,cpp 函數(shù)中,包含mysum.cpp , mycheng.cpp文件 mysum.cpp 中包含mysum函數(shù)的方法 mycheng.cpp 中包含mycheng函數(shù)的方法 執(zhí)行 cl main.cpp 生成main.exe可執(zhí)行文件 //////////////////////////////////////////////////////////////////////////////////////////////////////// ////main.cpp #include #include "mysum.cpp" #include "mycheng.cpp" void main() { double dresult=mysum(3.6 , 3.4); cout<<"3.6 + 3.4 ="< cout<<"3x6="< } //////////////////////////////////////////////////////////////////////////////////////////////////////// ////mysum.cpp double mysum(double dx,double dy) { double dsum=dx+dy; return dsum; } //////////////////////////////////////////////////////////////////////////////////////////////////////// ////mycheng.cpp double dcheng() { return 3.0*6.0; } //////////////////////////////////////////////////////////////////////////////////////////////////////// Result: 3.6 + 3.4 =7 3x6=18 (2) cl 生成obj文件,再link obj 文件,間接生成exe文件 將函數(shù)聲明和函數(shù)的實(shí)現(xiàn)分開(kāi),頭文件的作用就是函數(shù),類(lèi),變量的聲明. 如果在.h文件中加入了函數(shù)的實(shí)現(xiàn)部分,那么就破壞了文件的聲明作用. 如果這樣,那么編譯文件時(shí),文件的邏輯順序混亂. //mysum.h double mysum(double dx,double dy); //mycheng.h double dcheng(); //mysum.cpp double mysum(double dx,double dy) { double dsum=dx+dy; return dsum; } //mycheng.cpp double dcheng() { return 3.0*6.0; } //main.cpp #include #include "mysum.h" #include "mycheng.h" void main() { double dresult=mysum(3.6 , 3.4); cout<<"3.6 + 3.4 ="< cout<<"3x6="< } ////////////////////////////////////// 輸入命令順序 cl /c main.cpp //生成main.obj cl /c mysum.cpp //生成 mysum.obj cl /c mycheng.cpp //生成 mycheng.obj link mycheng.obj mysum.obj main.obj //生成 mycheng.exe //大家可以看到,采用任何一種files.obj的文件順序,都可以生成//exe 文件,而生成的exe文件名就是第一個(gè)obj文件名,。 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 通過(guò)第二部分,頭文件,,源文件怎樣組織在一起的困惑就解開(kāi)了,。頭文件只起到一個(gè)聲明作用,就像變量聲明一樣,。Link 將files.obj文件鏈接在一起,,就在鏈接的過(guò)程中,就把頭文件,,源文件的obj組織起來(lái)了,。 |
|
來(lái)自: julyfire > 《我的圖書(shū)館》