makefile

目录

makefile建立

1.最简单的makefile

2.makefile进阶

3.makefile优化

(1)常用的变量名(约定俗成的):

(2)一些特殊字符

(3)特殊变量

(4)makefile内置函数

代码


makefile三要素:目标;依赖;命令 

makefile执行原理:从上到下建立依赖关系;从下到上执行

makefile建立

通过实现一个加减乘除方法作为例子,文件结构如图所示

src中文件如图所示:

然后编写src中Makefile文件

1.最简单的makefile

app:add.c jian.c cheng.c chu.c main.c
    gcc add.c jian.c cheng.c chu.c main.c -I../include -o app

2.makefile进阶

app:add.o jian.o cheng.o chu.o main.o
    gcc add.o jian.o cheng.o chu.o main.o -o app
add.o:add.c
    gcc -c add.c -I../include
jian.o:jian.c
    gcc -c jian.c -I../include
cheng.o:cheng.c
    gcc -c cheng.c -I../include
chu.o:chu.c
    gcc -c chu.c -I../include
main.o:main.c
    gcc -c main.c -I../include

3.makefile优化

(1)常用的变量名(约定俗成的):

CC:表示c编译器版本

CFLAGS:表示编译时参数

CPPFLAGS:表示预处理参数

CXX:表示C++编译器版本

CXXFLAGS:表示c++编译时参数

LDFLAGS:表示库参数库选项

INCLUDE:表示头文件目录

TARGET:表示目标名

RM:删除选项

(2)一些特殊字符

$(变量):对变量取值

@:只显示命令结果,忽略命令本身

-:如果当前命令出错,忽略错误,继续执行

%:通配符,通配符是以遍历的方式实现的

(3)特殊变量

用于当前目标:

$@:代表目标

$<:代表依赖中的第一个

$^:代表所有依赖

(4)makefile内置函数

wildcard:按照指定格式获取当前目录下的所有文件名

例:SOURCEFILE=$(wildcard *.c):获取.c后缀的所有文件并返回赋值给SOURCEFILE

patsubst:根据指定的格式进行替换(字符串替换)

例:DEFFILE=$(patsubst %.c,%.o,$(SOURCEFILE))

代码

.PHONY:clean #伪目标
CC=gcc
INCLUDE=-I../include
CFLAGS=-c -g -Wall $(INCLUDE) #-g增加调试信息 -Wall严格编译
CPPFLAGS=-E -D    #-E头文件展开 -D编译时定义宏
CXX=g++
LDFLAGS=-L../lib -lpthread  #这只是个例子,并没用到该库。-l库名
TARGET=app
RM=rm -rf

SRCFILE=$(wildcard *.c)
DEFFILE=$(patsubst %.c,%.o,$(SRCFILE))

$(TARGET):$(DEFFILE)
    $(CC) $^ -o $(TARGET)
%.o:%.c
    $(CC) $(CFLAGS) $<

clean:
    -$(RM) $(TARGET) $(DEFFILE)
install:
    sudo cp $(TARGET) /usr/bin
uninstall:
    sudo $(RM) /usr/bin/$(TARGET)

 

  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值