linux开发工具,Linux开发工具_3_Makefile入门(上)

Linux开发工具

--Makefile入门(上)

一、简介

1)make工具:利用make工具可以自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。

2)makefile:make工具通过一个称为Makefile的文件来完成并自动维护编译工作。Makefile文件描述了整个工程的编译、连接等规则。

二、Makefile基本规则

TARGET(target:目标)…:DEPENDENCIES(dependencies:依赖性,相关性)…

COMMAND(command:命令,指挥) …

说明:

1)目标(TARGET):即最终想要产生的文件,如:可执行文件和目标文件等;目标也可以是要执行的动作,如clean,也称为伪目标。

2)依赖(DEPENDENCIES):为了产生目标文件而依赖的文件列表,一个目标通常依赖于多个文件。

3)命令(COMMAND):是make执行的动作(shell命令或是可在shell下执行的程序)。注意:每个命令行的起始字符必须为TAB字符!(但是在CSDN上因为排版的问题,无法正常显示出来。。。)如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容

三、一个简单的Makefile示例

.PHONY:clean #声明伪目标phony:假的,欺骗的;假冒者

main:main.oadd.o sub.o

gcc-Wall -g main.o add.o sub.o -o main

main.o:main.c

gcc-Wall -g -c main.c -o main.o

add.o:add.cadd.h

gcc-Wall -g -c add.c -o add.o

sub.o:sub.cadd.h

gcc-Wall -g -c sub.c -o sub.o

clean:

rm-f main.o add.o sub.o

执行:

1)make #生成第一个目标

2)makeclean #“生成”clean伪目标

3)makemain.o #仅生成main.o目标

4)make-f Makefile #指定执行的文件名

四、Makefile自动化变量 选项名 作用 $@ 规则的目标文件名

$< 规则的第一个依赖文件名

$^ 规则的所有依赖文列表

示例:【文件名Makefile.01】

.PHONY:clean

OBJECTS=main.oadd.o sub.o#定义变量

main:$(OBJECTS)

gcc-Wall -g $^ -o main

main.o:main.c

gcc-Wall -g -c $< -o main.o

add.o:add.cadd.h

gcc-Wall -g -c $< -o add.o

sub.o:sub.cadd.h

gcc-Wall -g -c $< -o sub.o

clean:

rm-f main $(OBJECTS)

执行:make-f Makefile.01

附:如果一条语句在执行Makefile文件时,不想打印出来,则在其前面加上@符号

五、Make编译多个可执行文件

1、Make使用隐含推导

示例1:

.PHONY:cleanall

BIN=01test02test

all:$(BIN)

clean:

rm-f $(BIN)

示例2:

.PHONY:cleanall

BIN=01test02test

all:$(BIN)

01test:01test.o

gcc-Wall -g $< -o $@

02test:02test.o

gcc-Wall -g $< -o $@

clean:

rm-f $(BIN) *.o

2、模式规则

%.o:%.c

3、后缀规则

.c.o:

示例3:

.PHONY:cleanall

BIN=01test02test

all:$(BIN)

#%.o:%.c

%.c.o: #与前一条命令作用相同

gcc-Wall -g -c $< -o $@

01test:01test.o

gcc-Wall -g $< -o $@

02test:02test.o

gcc-Wall -g $< -o $@

clean:

rm-f $(BIN) *.o

六、综合运用实例

(1)

.PHONY:cleanall

CC=gcc

CFLAGS=-Wall-g

BIN=01test02test

all:$(BIN)

#%.o:%.c

.c.o:

$(CC)$(CFLAGS) -c $< -o $@

01test:01test.o

$(CC)$(CFLAGS) $< -o $@

02test:02test.opub.o

$(CC)$(CFLAGS) $< -o $@

clean:

rm-f $(BIN) *.o

(2)

.PHONY:cleanall

CC=gcc

CFLAGS=-Wall-g

BIN=01test02test 03test

STR=$(CC)$(CFLAGS) -c $< -o $@

STR2=$(CC)$(CFLAGS) $< -o $@

all:$(BIN)

clean:

rm-f $(BIN) *.o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值