啟動終端,進入root模式,安裝gcc和g++
ubuntu:
***@***:~$ sudo apt-get install build-essential***@***:~$ gcc --version
***@***:~$ sudo apt-get install g++-4.8
***@***:~$ g++ --version
[***@*** ~]$ g++ -c hello.cpp輸出結果是乙個hello.o檔案,這是編譯過程的生成的中間檔案。-c 表示只編譯,不鏈結。
[***@*** ~]$ g++ -o hello.out hello.o輸出結果是乙個hello.out檔案,這是最終的可執行檔案。-o 表示輸出檔案,hello.o是上一步生成的.o檔案。
當然,如果第2、3步是可以合併執行,直接執行命令
[***@*** ~]$ g++ -o hello.out hello.cpp然而第2、3步分開執行是有意義的,後面會講到。
最後執行以下hello.out驗證一下輸出結果唄
[***@*** ~]$ ./hello.out實際開發過程中當然不可能只有乙個cpp這麼簡單,有時候會有非常多的.h和.cpp檔案相互配合,那麼上面直接通過g++編譯可執行檔案就沒那麼簡單了。我們需要借助make這個強大的專案構建工具,幫助我們構建和組織專案**。
假設現在有如下3個檔案:hw2.cpp、solution.h和solution.cpp
1 /* solution.h */2 class solution ;
1 /* solution.cpp */2 #include 3 #include "solution.h"
4 void solution::say()
1 /* hw2.cpp */2 #include "solution.h"
3 int main ()
可以看到這個簡單例子包括標頭檔案引用、定義和實現分離等情況,如果直接g++ -o hw2.out hw2.cpp將會報未定義引用的錯誤:
[***@*** ~]$ g++ -o hw2.out hw2.cpp
/tmp/ccimytxf.o:在函式『main』中:
hw2.cpp:(.text+0x10):對『solution::say()』未定義的引用
collect2: 錯誤:ld 返回 1
這時make就該大顯身手了。
首先我們還需要了解一下makefile。
在專案的根目錄下建立乙個makefile檔案,以告訴make如何編譯和鏈結程式。
1 build : hw2.o solution.o2 g++ -o build hw2.o solution.o #注意前面必須是tab,不能是空格
3 hw2.o : hw2.cpp solution.h
4 g++ -g -c hw2.cpp
5 solution.o : solution.h solution.cpp
6 g++ -g -c solution.cpp
7 clean :
8 rm hw2.o solution.o build
先來解釋一下makefile的基本語法規則:
target ... : prerequisites ...target是乙個目標檔案,可以是object file,也可以是執行檔案,還可以是乙個標籤;command #注意前面是tab
prerequisites是要生成那個target所需要的檔案或是目標;
command是make需要執行的命令(任意的shell命令)。
說白了就是target這乙個或多個目標,依賴於prerequisites列表中的檔案,其執行規則定義在command裡。如果prerequisites列表中檔案比target要新,就會執行command,否則就跳過。這就是整個make過程的基本原理。
那麼,我們回頭看看上面定義的makefile檔案,我們解釋一下每兩行的作用
1 build : hw2.o solution.otarget是build,依賴於hw2.o 和 solution.o,執行的命令是 g++ -o build hw2.o solution.o2 g++ -o build hw2.o solution.o
意思是通過g++鏈結hw2.o和solution.o,生成可執行檔案build,prerequisites有兩個.o檔案,是因為**裡hw2引用了solution.h。
3 hw2.o : hw2.cpp solution.htarget是hw2.o,依賴於hw2.cpp和solution.h,執行命令是g++ -g -c hw2.cpp4 g++ -g -c hw2.cpp
意思是通過g++編譯hw2.cpp檔案,生成hw2.o檔案,g++命令中 -g 表示生成的檔案是可除錯的,如果沒有-g,除錯時無法命中斷點。
5 solution.o : solution.h solution.cpp同上,編譯solution.cpp檔案,生成solution.o檔案。6 g++ -g -c solution.cpp
7 clean :這裡clean不是乙個可執行檔案,也不是乙個.o檔案,它只不過是乙個動作名字,類似於label的作用,make不會去找冒號後的依賴關係,也不會自動執行命令。如果要執行該命令,必須在make後顯示指出整個動作的名字,如make clean。8 rm hw2.o solution.o build
好了,接下來說一下make的工作原理。在預設的方式下,我們只需輸入make,則發生了以下行為:
a. make在當前目錄下找名為makefile或makefile的檔案;
b. 如果找到,它會找檔案中的第乙個target,如上述檔案中的build,並作為終極目標檔案;
c. 如果第乙個target的檔案不存在,或其依賴的.o 檔案修改時間要比target這個檔案新,則會執行緊接著的command來生成這個target檔案;
d. 如果第乙個target所依賴的.o檔案不存在,則會在makefile檔案中找target為.o的依賴,如果找到則執行command,.o的依賴必是.h或.cpp,於是make可以生成 .o 檔案了
e. 回溯到b步執行最終目標
看一下執行結果
[***@*** ~]$ makeg++ -g -c hw2.cpp
g++ -g -c solution.cpp
g++ -o build hw2.o solution.o #注意前面必須是tab,不能是空格
[***@*** ~]$ ./build
hi![***@*** ~]$
由於makefile檔案中加了-g這一選項,於是可以通過gdb進行除錯,並且會命中斷點,這裡感興趣可以再了解一下gdb的使用。
ubuntu初步配置
1.配置 vim ln s vim vimrc vimrc 建立軟鏈結 git clone vim bundle vundle 完成之後用 vim 開啟任意檔案,在命令模式下用 bundleinstall 安裝 bundleinstall 2.配置 php5 apache2 mysql sudo a...
Auto Layout的初步運用。
1.想要做到自適應,我們就得先確定控制項相對於父類檢視位置以及寬高,也就是確定frame。2.那麼自適應無非就是加些約束,來控制ui在父類檢視中的位置以及寬高。3.目前可以直接在storyboard中直接新增約束條件。如圖 4.點中控制項,按ctrl 滑鼠左鍵,即可增加約束條件。5.約束條件分為3類...
Div Css的初步運用
採用div css模式的 具有以下優勢 1 表現和內容相分離 2 簡潔,提高頁面瀏覽速度 3 易於維護和改版 4 提高搜尋引擎對網頁的索引效率。然後呢html檔案中放置css有三種型別 內聯 內嵌 外聯三種。感覺css中必須要清楚它的六中選擇符 1 html選擇符 2 類選擇符 3 id選擇符 4 ...