Linux的makefile 文件

本文介绍了Makefile的基础概念及如何使用make命令执行Makefile文件。通过一个简单的示例展示了如何编写Makefile来管理项目的编译流程,并解释了makefile的基本语法与结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        makefile文件由make命令执行。这个文件里面有一个工程的编译规则,先编译那个文件,编译顺序,在很多IDE下可以自己完成。这里只是简单介绍,详细内容:http://www.chinaunix.net/old_jh/23/408225.html

规则:目标:依赖

                   命令


链接外部库,就算在开始声明了math.h函数不会加载libmath.a库,只有在编译时加入

gcc  -g -Wall  hellomath.c  -lm -o math     -lm-libm.a简写。

 

Make凭借本身的优势,可在所有的 Unix系统中被找到。要了解关于Gnu make的更多信息,请参考 Richard M. Stallman Roland McGrath编写的GNU Make手册。 Make 从makefile(默认是当前目录下的名为‘Makefile’的文件)中读取项目的描述。makefile指定了一系列目标(比如可执行文件)和依赖(比如对象文件和源文件)的编译规则,其格式如下:

目标:依赖
        
命令

对每一个目标,make检查其对应的依赖文件修改时间来确定该目标是否需要利用对应的命令重新建立。注意到,makefile命令行必须以单个的TAB字符进行缩进,不能是空格。

GNU Make 包含许多默认的规则(参考隐含规则)来简化makefile的构建。比如说,它们指定‘.o文件可以通过编译‘.c文件得到,可执行文件可以通过将‘.o链接到一起获得。隐含规则通过被叫做make变量的东西所指定,比如CC(C语言编译器)CFLAGS(C程序的编译选项);在makefile文件中它们通过独占一行的变量=的形式被设置。对C++,其等价的变量是CXXCXXFLAGS,而变量CPPFLAGS则是编译预处理选项。

现在我们为上一节的项目写一个简单的 makefile 文件:

                CC=gcc
              CFLAGS=-Wall
              hello: hello.ohello_fn.o
              clean:
                      rm -f hello hello.o hello_fn.o

该文件可以这样来读:使用 C 语言编译器gcc,和编译选项‘-Wall’,从对象文件‘hello.o’和‘hello_fn.o’生成目标可执行文件hello(文件‘hello.o’和‘hello_fn.o’通过隐含规则分别由‘hello.c’和‘hello_fn.c’生成)。目标clean没有依赖文件,它只是简单地移除所有编译生成的文件。rm命令的选项 ‘-f’(force) 抑制文件不存在时产生的错误消息。

另外,需要注意的是,如果包含main函数的cpp文件为A.cpp, makefile中最好把可执行文件名也写成 A。

要使用该 makefile 文件,输入make。不加参数调用make时,makefile文件中的第一个目标被建立,从而生成可执行文件‘hello’

              $ make
              gcc -Wall -c -o hello.o hello.c
              gcc -Wall -c -o hello_fn.o hello_fn.c
              gcc hello.o hello_fn.o -o hello
              $ ./hello
              Hello, world!

一个源文件被修改要重新生成可执行文件,简单地再次输入make即可。通过检查目标文件和依赖文件的时间戳,程序 make可识别哪些文件已经修改并依据对应的规则更新其对应的目标文件:

              $ vim hello.c (打开编辑器修改一下文件)
              $ make
              gcc -Wall -c -o hello.o hello.c
              gcc hello.o hello_fn.o -o hello
              $ ./hello
              Hello, world!最后,我们移除 make 生成的文件,输入 make clean:

              $ make clean
              rm -f hello hello.o hello_fn.o一个专业的 makefile文件通常包含用于安装(make install)和测试(makecheck)等额外的目标。

本文中涉及到的例子都足够简单以至于可以完全不需要makefile,但是对任何大些的程序都使用 make 是很有必要的。

转载于:https://www.cnblogs.com/markmin214/archive/2013/03/27/2987964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值