Linux编写Makefile

    科技2022-07-11  84

    今天看了下这篇博客:教你写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可以让编译更加高效,提高开发效率。

    Processed: 0.020, SQL: 8