【问题标题】:GO | create 2 different executables on the same module去 |在同一模块上创建 2 个不同的可执行文件
【发布时间】:2023-02-02 07:07:23
【问题描述】:

我想知道是否可以在同一个模块上创建 2 个不同的可执行文件, main1.go -> main1.exe main2.go -> main2.exe

root
    -> main2.go
    -> main1.go

目标是运行 Makefile,它将创建 2 个不同的可执行文件。 谢谢

LATE_TARGET_HOOK=make_main
LATE_TARGET_HOOK=make_client
DS_CONF = ds.conf

export GOROOT := $(UV_golang_PKG)
export GOPROXY := http://****-product.****.com:****/artifactory/api/go/go
export GOSUMDB := off

export PATH := $(PATH):$(GOROOT)/bin
export VERSION := $(shell (cat $(SRCROOT)/VERSION))
GO =$(GOROOT)/bin/go

CONF_FILES = VERSION

include $(MODULEMK)

ifndef UV_BUILDNUMBER
    UV_BUILDNUMBER = 0000
endif

make_main:
    ${GO} mod tidy
    GOARCH=amd64 GOOS=linux CGO_CFLAGS=$(CGO_CFLAGS) CGO_LDFLAGS=$(CGO_LDFLAGS) $(GO) build $(BUILD_FLAGS) -o $(SRCROOT)/CMpub/bin/$(UV_O)/agentExporters .

make_client:
    ${GO} mod tidy
    GOARCH=amd64 GOOS=linux CGO_CFLAGS=$(CGO_CFLAGS) CGO_LDFLAGS=$(CGO_LDFLAGS) $(GO) build $(BUILD_FLAGS) -o $(SRCROOT)/CMpub/bin/$(UV_O)/disableCollector .

【问题讨论】:

  • 是的,这是可能的,但不是你的 go build 命令。重构。
  • 一个模块可以产生两个可执行文件,但一个包不能。为每个可执行文件创建一个包。
  • 它是如何做到的?

标签: go makefile


【解决方案1】:

但单个包裹不能。为每个可执行文件创建一个包。

它是如何做到的?

通过在项目中使用不同的 cmd 包,如我mentioned before

这在“Packing multiple binaries in a Golang package ” 2018年,由Ilija Eftimov

› tree
.
└── cmd
    ├── cookie
    │   └── main.go
    └── eight_ball
        └── main.go

go install ./... 会找到那些主要包并单独编译/安装它们。


一种更现代/不同的方法是使用“Getting started with multi-module workspaces”:您可以在同一工作区内处理不同的模块(每个命令一个)。

使用多模块工作区,您可以告诉 Go 命令您正在同时在多个模块中编写代码,并轻松地在这些模块中构建和运行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2014-07-03
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多