Je souhaite construire mon référentiel go pour construire un référentiel complet en goarch=arm64
时忽略 myrepo/gotvm/*
et dans tout autre cas.
La structure des dossiers du projet est la suivante :
└── myrepo ├── go.mod ├── main.go ├── gotvm │ ├── array.go │ ├── device.go │ └── gotvm.go └── otherstuff └── otherstuff.go
Tout fonctionne bien lors de la construction sur amd64 :
goos=linux goarch=amd64 go build -o amdbuild main.go
Construit sur la base de arm64
goos=linux goarch=arm64 go build -o armbuild main.go
L'erreur suivante se produit avant que le binaire ne soit créé :
package command-line-arguments imports github.com/myrepo/gotvm: build constraints exclude all go files in /homedir/myrepo/gotvm
La même chose est vraie lorsque j'ajoute la ligne suivante en haut de chaque fichier en utilisant package gotvm
(array.go
, device.go
, gotvm.go
) :
//go:build amd64 // +build amd64`
Autres étapes que j'ai essayées :
go clean -modcache
package gotvm
au-dessus de tous les fichiers appartenant à // go:build (darwin && cgo) || (linux && cgo) //go:build amd64 // +build amd64`
Il y a une question similaire ici : (package de simulation)
, mais cela ignore l'intégralité du dossier. Je veux ignorer les dossiers avec arch
不是 arm64
comme condition.
tl;dr; Existe-t-il un moyen de compiler mon référentiel de manière croisée vers arm64 et amd64 ? Je veux ignorer tvm dans la version arm64.
Spécifications :
go1.20.4 linux/amd64
Ajoutez le fichier go contenant uniquement la clause package au fichier gotvm
文件夹中可以解决此问题。例如,doc.go
:
// this file is a workaround for the following issue when built with goarch=arm64: // // build constraints exclude all go files in /homedir/myrepo/gotvm package gotvm
Mais lorsque vous rencontrez ce problème, la plupart du temps, cela signifie qu'il y a au moins un fichier qui importe ce package, et goarch=arm64
不排除这个文件。也许您应该从此文件中删除导入(或者对于 goarch=arm64
exclut également ce fichier).
J'ajouterai une démo pour illustrer le problème. Voici les fichiers :
├── go.mod ├── gotvm │ └── gotvm.go └── main.go
go.mod :
module example.com/m go 1.20
gotvm/gotvm.go :
//go:build amd64 package gotvm import "fmt" func f() { fmt.println("do awesome things using amd64") }
main.go :
package main import ( "fmt" _ "example.com/m/gotvm" ) func main() { fmt.Println("Hello world!") }
Pour cette démo, commencez par main.go
中删除 _ "example.com/m/gotvm"
或添加前面提到的 doc.go
文件即可解决该问题。我认为,最好从 main.go
中删除 _ "example.com/m/gotvm"
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!