go语言编译的Makefile的示例文件

2 篇文章 0 订阅

 

  • go vet 静态检查
  • go test 运行单元测试
  • go fmt 格式化
  • go build 编译
  • go run 运行
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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个多文件makefile 示例: ```makefile # 定义编译器 CC = g++ # 定义编译参数 CFLAGS = -c -Wall # 定义链接参数 LFLAGS = -Wall # 定义源文件目录 SRC_DIR = src # 定义头文件目录 INC_DIR = include # 定义目标文件目录 OBJ_DIR = obj # 定义可执行文件目录 BIN_DIR = bin # 定义源文件列表 SRCS = $(wildcard $(SRC_DIR)/*.cpp) # 定义头文件列表 INCS = $(wildcard $(INC_DIR)/*.h) # 定义目标文件列表 OBJS = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS)) # 定义可执行文件名 TARGET = $(BIN_DIR)/app # 编译规则 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INCS) $(CC) $(CFLAGS) -I$(INC_DIR) $< -o $@ # 链接规则 $(TARGET): $(OBJS) $(CC) $(LFLAGS) $(OBJS) -o $@ # 清理规则 clean: rm -rf $(OBJ_DIR)/*.o $(TARGET) ``` 在这个示例中,我们假设有一个包含源文件和头文件的 `src` 和 `include` 目录,以及一个存放目标文件的 `obj` 目录和存放可执行文件的 `bin` 目录。我们希望将所有的源文件编译成目标文件,再将所有的目标文件链接成可执行文件makefile 中的变量 `CC`、`CFLAGS` 和 `LFLAGS` 分别定义了编译器、编译参数和链接参数,我们可以根据需要进行修改。 makefile 中的变量 `SRC_DIR`、`INC_DIR`、`OBJ_DIR` 和 `BIN_DIR` 分别定义了源文件目录、头文件目录、目标文件目录和可执行文件目录,我们也可以根据需要进行修改。 makefile 中的变量 `SRCS`、`INCS` 和 `OBJS` 分别定义了源文件列表、头文件列表和目标文件列表,其中 `$(wildcard)` 函数可以获取指定目录下的所有文件,`$(patsubst)` 函数可以将一个文件名模式映射到另一个文件名模式,具体可以参考 GNU make 的文档。 makefile 中的规则 `$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INCS)` 定义了编译规则,表示将源文件编译成目标文件,其中 `-I$(INC_DIR)` 表示将头文件目录添加到编译器的搜索路径中。 makefile 中的规则 `$(TARGET): $(OBJS)` 定义了链接规则,表示将所有的目标文件链接成可执行文件makefile 中的规则 `clean` 定义了清理规则,表示删除所有的目标文件和可执行文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值