對於大一點的項目,Makefile都是不可或缺的,這里記錄一個自己弄的簡單的例子。
有3個file: main.cpp main2.cpp main2.h
main.cpp -- main函數所在,調用main2.cpp中的一個外部函數test()
main2.cpp -- test函數所在
main2.h -- test的函數聲明
看一下三個文件:
//main.cpp #include <iostream> #include "main2.h" using namespace std; void test(); int main() { int a = 1; test(); }
//main2.cpp #include <iostream> #include "main2.h" using namespace std; void test() { cout<<"test in main2.cpp"<<endl; }
//main2.h #ifndef _MAIN2_H_ #define _MAIN2_H_ void test(); #endif
流程是:
main2.cpp -> main2.o
main.cpp -> main.o
main.o + main2.o -> main(可執行文件)
那么Makefile這樣寫:
main: main.o main2.o g++ -o main main.o main2.o main.o: main.cpp main2.h g++ -o main.o -c main.cpp main2.o: main2.cpp main2.h g++ -o main2.o -c main2.cpp clean: rm *.o main
其中g++所在的行,就是執行編譯的命令。
其中帶有冒號 : 的行,意思是如果冒號后面有文件更新了,那么就執行下一行g++命令更新冒號前的那個內容。冒號前的內容depend on冒號后的內容。
clean就是清除中間文件和最終文件。