makefile

makefile简单用法

1,执行的时候,如果没有知道目标,则默认执行makefile里的第一个目标,一般项目上都是把all作为第一个目标。

2,【#】代表注释

3,函数:

  • wildcast:可以进行文本匹配
  • patsubst:内容替换

4,系统变量:

  • $@:代表目标
  • $<:代表全部依赖
  • $^:第一个依赖
  • $?:第一个发生了变化的依赖

5,杂项:

  • 【@】在规则前:代表不在终端中输入改命令
  • 【-】在规则前:代表即便该条命令出错,也往下执行

6,伪目标用法:

伪目标【.PHONY】的使用场景是:一般makefile都会有一个clean的目标,为了清理.o文件,但是如果有个文件的名为clean,再执行【make clean】就会提示【make:‘clean’ is up to date.】。也就是说make认为clean已经存在了,没有必要再执行clean了,所以导致clean不能够被执行。【.PHONY】的作用就是告诉make,【.PHONY】后面的目标是不生成任何文件的,所以不会去检查有没有已经存在的clean文件了。

7,一般项目上的经验:

  • 用all作为伪目标,all后面放实际的目标
  • 【.PHONY】的目标为,clean和all
  • clean的时候,一般在rm命令后面,加-f选项,目的是防止没有删除目标的时候,出错误。

例子:

#取得src目录下所有的.c文件
srcFile=$(wildcard ./src/*.c)
#把变量srcFile里的.c替换成.o
objFile=$(patsubst %.c, %.o, $(srcFile))

#伪目标
all:app

app:$(objFile) main.o
	gcc -o $@ -I./include $^

%.o:%.c
	gcc -c $^ -o $@ -I./include

test:
	@echo $(srcFile)
	@echo $(objFile)

#伪目标
.PHONY:clean all

clean:
	-@rm -f  $(objFile)
	-@rm -f main.o

目录结构:

├── include
│   └── head.h
├── main.c
├── main.o
├── makefile
├── obj
└── src
    ├── add.c
    ├── add.o
    ├── mul.c
    ├── mul.o
    ├── sub.c
    └── sub.o

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

原文地址:https://www.cnblogs.com/xiaoshiwang/p/10752010.html