Linux编程——入门级Makefile文件编写
前言
1.在Linux開發環境中,編寫Makefile文件是一個必須的技能,雖然現在有好多IDE可以自動生成所需要的Makefile文件,但有時能看懂Makefile文件也是更好的了解項目的編譯過程。
2.我在這里只演示入門級Makefile文件的編寫,我使用的系統是Ubuntu16.04這個版本,使用的演示源碼語言是C++。
源文件準備
1.假設我們現在有main.cpp,other.cpp,other.h這三個源文件,其中main.cpp是主函數,它調用了other.h里面的函數。
main.cpp代碼如下:
other.cpp
#include "other.h"int add(int i, int j) {return i+j; }other.h
#ifndef OTHER_H #define OTHER_H #include <iostream>using namespace std;int add(int, int);#endif // OTHER_H2.如果現在我們使用g++進行編譯,則是直接生成用-o編譯,生成可執行文件.
g++ main.cpp other.cpp -o add然后運行可執行文件:
./add
3.如是只有一兩個源文件,這樣編譯是沒有問題的,但有幾十個或者上百個時,這樣編譯是不現實的,那就要Makefile文件做這一步。
(1)Makefile文件的編寫規則是:
(2)那用Makefile編譯上面的源碼的步驟是:
A、在存放源碼的路徑下新建一個Makefile文件,不要任何后綴,用vim打開。
B、按上面給的規則寫好Makefile文件:
C、保存,退出,在當前目錄下執行make這個命令:
可以看到,在當前目錄下多了一個add的可執行文件,返回看上面的makefile的代碼,我寫了三個規則,但Make是默認只執行第一個規則而已。
接下我執行:
執行了第二條規則,以此類推,要執行第三條規則,則在make后面加上規則名。
D.依賴項的意思是,如果依賴的其中的文件有更新則重新編譯,但只編譯有變化的文件。
4.這只是簡單的介紹了Makefile文件的編寫方式,那真正項目中的Makefile文件是這樣子的,會使用一些通配符,Makefile文件能調用的庫函數等,但原理不變。
EXE = subject #給變量賦值#src放源代碼文件,object是放項目的路徑 SUBDIR = src object#用迭代器把所有的子目錄下的cpp找到 CXX_SURCES = $(foreach dir,$(SUBDIR),$(wildcard $(dir))/*.cpp)#patsubst函數把列表的文件替換 CXX_OBJECTS=$(patsubst %.cpp,%.o,$(CXX_SURCES))#得到.d文件 DEP_FILES=$(patsubst %.cpp,%.d,$(CXX_SURCES))$(EXE):$(CXX_OBJECTS) #編譯命令g++ $(CXX_OBJECTS) -o $(EXE)%.o:%.cpp #鏈接命令g++ -c -MMD $< -o $@ #$<(依賴項列表) $@(當前規則) -MMD(生成.d文件為生.h的依賴)-include $(DEP_FILES) #簡化頭文件依賴cleran:rm -rf $(EXE) $(DEP_FILES) $(CXX_OBJECTS)總結
以上是生活随笔為你收集整理的Linux编程——入门级Makefile文件编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用OpenCV实现图像中的文字切割
- 下一篇: 使用OpenCV调用Caffe-SSD训