Makefile

本文深入解析Makefile的语法和用法,包括目标、前置条件、执行命令等基本概念,以及伪目标、内置变量等高级特性。通过示例,详细介绍了如何使用Makefile进行编译、测试、清理等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Makefile语法

<target> : <prerequisites> 
[tab]  <commands> 

- target : 即自定义的想要执行的命令
- prerequisites: 前置条件,即执行 target 命令之前执行的命令
- commands : 具体的执行的命令
- .PHONY 伪指令,内置的关键字
- 不带参数,默认执行第一个 target
- @ 表示禁止回声,即终端不会打印真实的执行命令
- # 表示注释
- ${val} 表示变量,和 shell 脚本中的变量的声明和使用一致
- 允许使用 通配符

1.在命令的前面加上@,就可以关闭回声。

// 现在再执行make test,就不会有任何输出。

test:
    @# 这是测试

2.伪目标

// 声明clean是"伪目标"之后,make就不会去检查是否存在一个叫做clean的文件,而是每次运行都执行对应的命令。

.PHONY: clean
clean:
        rm *.o temp

3.内置变量

$(CC) 指向当前使用的编译器,$(MAKE) 指向当前使用的Make工具.
$@指代当前目标,就是Make命令当前构建的那个目标。 $< 指代第一个前置条件。
  1. go makefile 示例

make default : 编译
make fmt: 格式化
make vet: 静态检查
make test: 运行测试
make install: 下载依赖库
make clean: 移除编译的二进制文件

BINARY="example"
VERSION=1.0.0
BUILD=`date +%FT%T%z`

PACKAGES=`go list ./... | grep -v /vendor/`
VETPACKAGES=`go list ./... | grep -v /vendor/ | grep -v /examples/`
GOFILES=`find . -name "*.go" -type f -not -path "./vendor/*"`

default:
	@go build -o ${BINARY} -tags=jsoniter

list:
	@echo ${PACKAGES}
	@echo ${VETPACKAGES}
	@echo ${GOFILES}

fmt:
	@gofmt -s -w ${GOFILES}

fmt-check:
	@diff=$$(gofmt -s -d $(GOFILES)); \
	if [ -n "$$diff" ]; then \
		echo "Please run 'make fmt' and commit the result:"; \
		echo "$${diff}"; \
		exit 1; \
	fi;

install:
	@govendor sync -v

test:
	@go test -cpu=1,2,4 -v -tags integration ./...

vet:
	@go vet $(VETPACKAGES)

docker:
    @docker build -t wuxiaoxiaoshen/example:latest .

clean:
	@if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi

.PHONY: default fmt fmt-check install test vet docker clean

相关链接

http://c.biancheng.net/view/7113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值