Linux Makefile

makefile文件(项目管理工具)是GNU工具链的一部分。

优点

1.重用性极强(一次编写终身受益) ,可以反复使用管理不同的项目

2.便捷的编译管理代码,不用每次书写复杂的编译命令

3.节省编译时间

编译时间分为:编译期(预编译、编译、汇编)+链接期(把所有的.文件链接生成可执行文件)

编译期: 源文件.c编译生成.o文件

第一次编译的时候不会节省编译时间,会保存所有生成的中间文件.o文件,下一次编译的时候只编译修改的源文件,重新生成.o文件,没有修改的源文件直接使用保存的.o文件,一起链接生成可执行文件。

怎么判断源文件是否被修改?

比较源文件的修改时间和.o文件的生成时间,如果源文件的修改时间更新,说明生成.o文件以后源文件又被修改过,需要重新编译。

命名        必须以makefile或者Makefile命名

注释        #

Makefile三要素:

1.目标:完成编译,生成可执行文件,可执行文件名字就是目标。

2.依赖:源文件或者资源文件

3.命令:根据依赖生成目标要执行的命令

书写格式

目标:依赖

        命令(前面不是空格是tab)

执行makefile文件: make

 第一次编译的时候不会节省编译时间,会保存所有生成的中间文件.o文件。

 下一次编译的时候只编译修改的源文件。

makefile执行原理和注意事项

自顶向下建立依赖关系。

默认只有一个最终目标,可以有多个中间目标。

要把最终目标写到最上面。

makefile变量定义和使用

1.自定义变量:

没有数据类型,默认都是字符串。

变量名可以由字母、数字、下划线构成,不能以数字开头,为了于高级语言区分,一般都使用全大写。

使用: $(变量名)

2.内置:

$@    表示目标名,随着目标名字的变化而变化

$^      表示所有依赖项

$<     表示第一个依赖项

使用内置变量替换前和替换后:

内置函数和内建语法

1.wildcard文件名处理函数:获取某个路径下的所有文件名    

#获取当前路径下所有.c文件的名字,存到变量SOURCEFIIE

SOURCEFILE=$(wildcard *.c)        #SOURCEEIIE=main.c add.c sub.c mul.c des.c

2.patsubst字符串处理函数

#使用patsubst把SOURCEFILE里面的所有.c文件名字变成.o文件存到DFILE变量

DFILE=$(patsubst %.c,%.o,$(SOURCEFILE))        #DFILE=main.o add.o sub.o des.o mul.o

3.内建语法

%.o:%.c

        gcc -c $< -I../include

使用内置函数和内建语法替换前和替换后:

常用变量

TARGET=myapp       存储目标名字
CC=gcc      用于存储编译器版本
INCLUDE_PATH=../include 存储头文件路径
LIBRARY_PATH=../lib存储库文件路径
INSTALL_PATH=/usr/bin存储安装路径
CFLAGS=-I$(INCLUDE_PATH) -c -Wall存储编译选项
CPPELAGS=-D  预处理选项

 使用常用变量替换前和替换后:

 

 定义为变量的好处是,方便以后的修改。

功能目标: 没有依赖,只有命令

1、删除:

clean:

        rm -rf $(DFILE) $(TARGET)

2、安装:

install:

        sudo cp $(TARGET) $(INSTALL_PATH)

3.卸载:

使用时候要注意不要有空格,可以先输出一下试试,有空格就会删除路径下的所有文件

定义路径变量时,语句和注释中间不要有空格 

uninstall:

        sudo rm -rf $(INSTALL_PATH)/$(TARGET)

4.输出:

output:

        echo $(INSTALL_PATH)/$(TARGET)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值