Makefile學習(一)----初步理解
一.我對makefile的理解:
經過一段時間對makefile的學習,我理解的makefile就是將程式設計師手動編譯原始檔的過程用一個指令碼執行,這對於小型專案來說,程式設計師手動執行和用makefile來執行感官上可能沒有大的差異,但是對於中大型專案來說,makefile的存在大大提供了程式設計師編譯程式碼效率,一個好的makefile檔案是一個專案健康存在的基礎。
二.初涉makefile:
用個簡單的例子初步認識下makefile:
原始檔:test.cpp:
#include<iostream>
using namespace std;
class A
{
private:
int a;
public:
A(int i)
{
a=i;
}
void disp()
{
cout<<a<<",";
}
};
class B
{
private:
int b;
public:
B(int j)
{
b=j;
}
void disp()
{
cout<<b<<",";
}
};
class C:public B,public A
{
private:
int c;
public:
C(int k):
A(k-2),B(k+2)
{
c=k;
}
void disp()
{
A::disp();
B::disp();
cout<<c<<endl;
}
};
int main()
{
C obj(10);
obj.disp();
return 0;
}
Makefile檔案Makefile:
test:test.o
g++ test.o -o test
test.o:test.cpp
g++ -c test.cpp -o test.o
clean:
rm -fr test test.o
****************************************************************************
test:test.o ---- test是目標檔案,也就是最後要生成的可執行檔案;
test.o編譯原始檔產生的中間程式碼檔案;
這行命令的意思是:目標檔案test的產生依賴於中間程式碼檔案test.o;
g++ test.o -o test ---- 這行是編譯器通過中間程式碼檔案產生目標檔案的命令,命令必須以tab鍵打頭,否則執行的時候會報錯;這邊使用的是g++編
譯器,所以你的環境必須安裝g++編譯器;
test.o:test.cpp ----這行的目標檔案是test.o,依賴檔案是test.cpp;和第一行的格式相同;
g++ -c test.cpp –o test.o ----這行是通過原始檔test.cpp如何生成中間程式碼檔案test.o,是編譯命令;
clean:
rm -fr test test.o
clean是清除想要刪除的檔案,執行的時候需要使用命令make clean,一般是刪除中間程式碼檔案和最後生成的目標檔案,即可執行檔案;
在環境中執行make命令,系統就會在目錄下自動尋找Makefile、makefile檔案,然後執行makefile檔案中的內容;同樣,你可以指定你自己的makefile檔名,比如:makefile_201020831,執行的時候必須用make –f makefile_201020831;
Makefile的執行過程是一個遞迴的過程,目標檔案:依賴檔案,是使用命令通過依賴檔案生成目標檔案的過程;
驗證生成的目標檔案,即可執行檔案,直接./test即可。