Makefile 简单实例

1. makefile 命令规则

target… : prerequisites …
command


-------------------------------------------------------------------------------
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)

makefile中的shell命令的使用

  1. 明确用shell指明。
  2. 如果不需要打印执行的shell命令,可以用@shell_command 的形式,不输出打印命令。

2. 忽略命令出错

为了做到这一点,忽略命令的出错,我们可以在Makefile的命令行前加一个减号“-”(在Tab键之后),标记为不管命令出不出错都认为是成功的。如:
clean:
-rm -f *.o

3. 自动化变量

$@: 所有的target
$^: 所有的依赖
$<: 生成目标所需要的当前依赖

4. 变量赋值

4种赋值方式:

  • 简单赋值( := )(最常用)
  • 递归赋值( = ):使用最后一次有效值
  • 条件赋值( ?= ):如果变量未定义,赋值有效,如果已经定义,赋值无效
  • 追加赋值( += ):原变量后边追加新的值

5. 指定伪目标

“all” 这个伪目标是所有目标的目标,其功能一般是编译所有的目标。
“clean” 这个伪目标功能是删除所有被make创建的文件。
“install” 这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去。
“print” 这个伪目标的功能是例出改变过的源文件。
“tar” 这个伪目标功能是把源程序打包备份。也就是一个tar文件。
“dist” 这个伪目标功能是创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。
“TAGS” 这个伪目标功能是更新所有的目标,以备完整地重编译使用。
“check”和“test” 这两个伪目标一般用来测试makefile的流程。

6. phony的作用

  1. 直接执行伪目标,不需要生成目标文件。
  2. 解决间接依赖不更新的问题。

7. 简单示例

编译一个hello.c 文件为hello可执行文件

CC=gcc
CFLAG=-c -Wall
SOURCE=hello.c
#OBJECT=$(SOURCE:.cpp=.o) #equal to -> line 14 && 15
OBJECT=hello.o
EXECUTABLE=hello

.PHONY:all
all: $(SOURCE) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECT)
        $(CC) $(OBJECT) -o $(EXECUTABLE)

$(OBJECT): $(SOURCE)
        $(CC) $(CFLAG) $(SOURCE)


clean:
        rm -rf hello
        echo "remove all exe file successfully!"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值