zoukankan      html  css  js  c++  java
  • Makefile

    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

  • 相关阅读:
    15:链表中倒数第K个节点
    14:调整数组顺序使奇数位于偶数的前面
    13:在O(1)时间内删除单向链表中的一个节点
    centos7下zookeeper集群安装部署
    zabbix3.2监控mysql
    解决关于confluence缓慢 字体乱码 宏乱码 编辑不能贴图等问题
    nginx日志文件的定时切割与归纳
    centos7安装sonarqube6.7 代码质量管理平台
    centos7下安装vnc更改vnc默认端口号
    centos7安装java环境和maven环境
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/12895394.html
Copyright © 2011-2022 走看看