• 为Go项目编写Makefile


    为Go项目编写Makefile

    借助Makefile我们在编译过程中不再需要每次手动输入编译的命令和编译的参数,可以极大简化项目编译过程。

    一、make介绍

    make是一个构建自动化工具,会在当前目录下寻找Makefilemakefile文件。如果存在相应的文件,它就会依据其中定义好的规则完成构建任务。

    二、Makefile介绍

    我们可以把Makefile简单理解为它定义了一个项目文件的编译规则。借助Makefile我们在编译过程中不再需要每次手动输入编译的命令和编译的参数,可以极大简化项目编译过程。同时使用Makefile也可以在项目中确定具体的编译规则和流程,很多开源项目中都会定义Makefile文件。

    本文不会详细介绍Makefile的各种规则,只会给出Go项目中常用的Makefile示例。关于Makefile的详细内容推荐阅读Makefile教程

    三、规则概述

    Makefile由多条规则组成,每条规则主要由两个部分组成,分别是依赖的关系和执行的命令。

    其结构如下所示:

    [target] ... : [prerequisites] ...
    <tab>[command]
        ...
        ...
    

    其中:

    • targets:规则的目标
    • prerequisites:可选的要生成 targets 需要的文件或者是目标。
    • command:make 需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。

    举个例子:

    build:
    	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx
    

    四、示例

    .PHONY: all build run gotool clean help
    
    BINARY="bluebell"
    
    all: gotool build
    
    build:
    	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY}
    
    run:
    	@go run ./
    
    gotool:
    	go fmt ./
    	go vet ./
    
    clean:
    	@if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi
    
    help:
    	@echo "make - 格式化 Go 代码, 并编译生成二进制文件"
    	@echo "make build - 编译 Go 代码, 生成二进制文件"
    	@echo "make run - 直接运行 Go 代码"
    	@echo "make clean - 移除二进制文件和 vim swap files"
    	@echo "make gotool - 运行 Go 工具 'fmt' and 'vet'"
    

    其中:

    • BINARY="bluebell"是定义变量。
    • .PHONY用来定义伪目标。不创建目标文件,而是去执行这个目标下面的命令。
  • 相关阅读:
    超详细动画彻底掌握深度优先,广度优先遍历!
    拜托,别再问我什么是 B+ 树了
    高性能短链设计
    Gradle build 太慢,可能是你使用的姿势不对
    看完这些,你也能成技术专家
    x58平台 服务器电源配置 tdp
    系统掉盘,机械硬盘掉盘,固态掉盘
    centos7 修改ip和dns
    centos 修改hostname
    TCP三次握手和四次挥手过程
  • 原文地址:https://www.cnblogs.com/randysun/p/15889532.html
Copyright © 2020-2023  润新知