Как скопилировать все несвязные файлы в Go?
У меня есть небольшое количество несвязных между собой файлов (это не части модуля или проекта), просто разного рода наброски и заметки.
Как собрать их все разом явно не указывая каждый раз, что именно нужно скомпилировать?
go run .
# _/mnt/library/projects/hck/Go
./listen.go:12:6: main redeclared in this block
previous declaration at ./array.go:7:6
go build .
# _/home/Sharlatan/Projects/hck/Go
./listen.go:12:6: main redeclared in this block
previous declaration at ./array.go:7:6
/array.go/
package main
import (
"fmt"
)
func main() {
var a1 [10]int
a2 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
fmt.Println(a1)
fmt.Println(a2)
}
/listen.go/
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8181", nil)
}
Ответы (2 шт):
Автор решения: Ainar-G
→ Ссылка
Надо указывать каждый файл по отдельности. Если вы хотите это автоматизировать, используйте Make:
all: array.bin listen.bin
array.bin: ; go build -o $@ ./array.go
listen.bin: ; go build -o $@ ./listen.go
Или Shell:
for f in ./array.go ./listen.go
do
go build -o "${f%.go}.bin" "$f"
done
Автор решения: Hellseher
→ Ссылка
Точка (.) в конце команды говорит о том, что все принадлежит одному пакету и выдает ошибку о дублированной main() при компиляции.
Старый добрый Makefile (GNU make) может решить "проблему" там, где ее вроде и не должно быть - скомпилировать заведомо неизвестный список несвязных между собой файлов.
/Makefile/
GO_FILES := $(wildcard ./*.go)
all:
@$(foreach file ,$(GO_FILES), go build -o $(subst .go,,$(file)) $(file);)
ls; make; ls
Makefile array.go listen.go randomPass.go
Makefile array array.go listen listen.go randomPass randomPass.g
Ссылки
- https://getstream.io/blog/how-a-go-program-compiles-down-to-machine-code/
- https://github.com/golang
go/src/go/базовые компонентыscannertokenparserast