对于大一点的项目,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就是清除中间文件和最终文件。