今天看了下这篇博客:教你写Makefile(很全,含有工作经验的)
自己也试着实验了一下~
我分别编写了三个cpp文件:a.cpp、b.cpp、c.cpp,依赖关系为a依赖b,b依赖c
a.cpp:
#include<iostream> #include"b.cpp" using namespace std; int main(){ cout<<"a"; testb(); return 0; }b.cpp:
#include<iostream> #include"c.cpp" using namespace std; void testb(){ cout<<"b"; testc(); }c.cpp:
#include<iostream> using namespace std; void testc(){ cout<<"c"; }根据三个cpp的依赖关系:依赖关系为a依赖b,b依赖c
编写以下makefile文件:
test: a.o g++ -o test a.o a.o: a.cpp b.o g++ -c a.cpp b.o b.o: b.cpp c.o g++ -c b.cpp c.o c.o: c.cpp g++ -c c.cpp clean: rm *.o rm test上述makefile文件可用“make”指令生成名为test可执行文件,也可以用"make clean"指令来删掉所有的.o文件和test执行文件。
运行结果如下:
为了更好测试这种依赖关系所带来的的编译效率,我要修改一下代码的依赖关系,改成:a依赖b、c
a.cpp:
#include<iostream> #include"b.cpp" #include"c.cpp" using namespace std; int main(){ cout<<"a"; testb(); testc(); return 0; }b.cpp:
#include<iostream> using namespace std; void testb(){ cout<<"b"; }c.cpp:
#include<iostream> using namespace std; void testc(){ cout<<"c"; }makefile:
test: a.o g++ -o test a.o a.o: a.cpp b.o c.o g++ -c a.cpp b.o c.o b.o: b.cpp g++ -c b.cpp c.o: c.cpp g++ -c c.cpp clean: rm *.o rm test先执行一次make看看:
然后将b.cpp进行修改,输出的b改为bb,然后再次执行make看看:
可以发现这次少了一行编译c.cpp的命令,这是因为c.cpp文件并没有修改,不需要重新编译,而b.cpp发生了修改,导致需要重新编译出b.o和重新链接得到a.o和test文件。
可见,使用makefile可以让编译更加高效,提高开发效率。