关于Linux下对于makefile的理解

2019-01-30 11:26:23 6479

什么是makefile呢?在Linux下makefile我们可以把理解为工程的编译规则。一个工程中源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,那些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可执行操作系统的命令。


makefile带来的好处就是---“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。


make命令在执行时,需要一个makefile文件,以告诉make命令要怎样去编译链接程序。只要我们makefile写的足够好,make命令会自动智能的根据当前文件自己编译所需要的文件和链接目标文件。

makefile的规则:

target:prerequisites

  command

.......................

arget是目标文件,prerequisites就是要生成target所需要的文件或是目标。command就是make需要执行的命令。这是一个文件依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。如果prerequisites中如果有一个以上的文件比target文件内容要新的话,command所定义的文件就会被执行。这就是makefile最核心的内容。


举个栗子:


先准备三个文件:file1.c,file2.c,file2.h

file1.c:

#include<iostream>

int main()

{

file2printf();

return 0;

}

file2.h:

#ifndef FILE2_H_

#define FILE2_H_

void file2printf();

#endif

file2.c

#include"file2.h"

void file2printf()

{

printf("hello world!\n");

}

那么它的makefile怎么写呢?(makefile文件和文件在同一目录下)


test:file1.o file2.o          //test依赖file1.o和file2.o两个目标文件


  gcc -c file1.o file2.o -o test    //编译出test可执行文件,-o 表示指定的目标文件名


file1.o:file1.c file2.h          //编译出file1.o文件,file1.o依赖于file1.c和file2.h,-c表示GCC只把给他的文件编译成目标文件  


  gcc -c file1.c -o file1.o


file2.o:file2.c file2.h                       //这两句与上两句相同


  gcc -c file2.c -o file2.o


.PHONY:clean


clean:


rm -rf* .o test      //当输入make clean命令时,就会删除所有的.o文件和test文件了


注意:每个命令行之前都必须有tab符号。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: