Linux make命令和makefile文件


在编写小程序的时候,许多人都会在编译完源文件后重新编译所有文件来重建应用程序。但对大型程序来说,会带来一些很明显的问题,编辑–编译–测试这一循环的周期将变长,如果仅仅是改变了一个源文件,即使是再有耐心的程序员也不想编译所有的源文件。
而make工具可以解决上述问题,它会再必要时重新编译所有受改动影响的源文件。
make命令与makefile文件的结合提供了一个在项目管理领域十分强大的工具,不仅常用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录。

make命令

make程序本身有许多选项,以下只介绍常用的三种:

-k:让make命令再发现错误时仍继续执行,而不是在检测到第一个错误时就停下来。
-n:让make命令输出将要执行的操作步骤,而不是真正执行这些操作。
-f 《filename》:告诉make命令将哪个文件作为makefile文件。

简单的makefile文件的创建与使用

makefile规则写法:先写目标的名称,然后紧跟着一个冒号,(然后是空格或制表符tab),最后使用空格或制表符tab隔开的文件列表
解释为
目标:依赖文件

如下所示:

all: main
#GDB -g

main: main.o         //目标文件main的依赖文件为main.o
gcc -o main main.o 

main.o: main.c     //main.o依赖文件为main.c
gcc -c main.c 	   //将源文件main.c编译成main.o

clean: //清理中间文件
rm *.o main

下面是一个具体的例子:
add.h

#include<stdio.h>
#include<math.h>

int Add(int a, int b);

add.c

int Add(int a,int b)
{
	return a+b;
}

main.c

#include<stdio.h>
#include"add.h"

int main()
{
	int a = 2, b=8;
	int sum = Add(a, b);
	printf("add = %d\n",sum);
	return 0;
}

makefile

all:main
#GDB = -g

main:main.o add.o
	gcc -o main main.o add.o
 
main.o:main.c
	gcc -c main.c

add.o:add.c
	gcc -c add.c

clean:
	rm *.o main 

运行结果:
执行make命令之前:
在这里插入图片描述
执行make命令之后:
在这里插入图片描述
运行程序:
在这里插入图片描述
注释:再makefile文件中进行注释的时候用“#”,而非“//”。

makefile文件中的宏

makefile中允许使用简单的宏指代源文件及其相关编译信息,在Linux中也称宏为变量。在引用宏时只需在变量前加$符号,但值得注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号()。
下面是对上面makefile文件的一个改进:

all:main

CC = gcc

INCLUDE = .

CFLAGS = -g -Wall -ansi

main:main.o add.o
	$(CC) -o main main.o add.o

main.o: main.c
	$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
	
add.o: add.c
	$(CC) -I$(INCLUDE) $(CFLAGS) -c add.c
	
clean: 
	rm *.o main

这里使用到了变量,用CC代替了gcc, CFLAGS是makefile中预定义的变量,我们为将它初始化为-g -Wall -ansi(用于开启警告信息、编译链接过程中执行优化处理、增加调试信息),这三个参数都是gcc参数的常用的值,关于gcc参数常用值,这里不做具体介绍。

以下是运行结果:
在这里插入图片描述
通过使用宏定义,可以方便的更改某一行,而不需要更改好多行,提高了效率。
目前水平有限,只能了解这么深了。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值