【问题标题】:Delete .a files after build - GoLang构建后删除 .a 文件 - GoLang
【发布时间】:2015-02-25 23:43:01
【问题描述】:

我目前正在使用fresh 在项目中任何源文件的每次更改时重建并重新启动网络服务器。

它工作正常。但是,一段时间后,文件会在 pkg 目录中创建。这导致刷新不再发生,原因是它没有获取源文件(.go 文件)来构建二进制文件,而是获取 .a 文件。如何避免此功能?

添加信息:

文件:与main.go同级的runner.conf

root: .
tmp_path: ./tmp
build_name: bin/app.bin
build_log: runner-build-errors.log
valid_ext: .go, .tpl, .tmpl, .html
build_delay: 600
colors: 1
log_color_main: cyan
log_color_build: yellow
log_color_runner: green
log_color_watcher: magenta
log_color_app:
ignore_dirs: ./pkg

根本不工作:

13:39:48 watcher     | Watching .
13:39:48 watcher     | Watching bin
13:39:48 watcher     | Watching pkg
13:39:48 watcher     | Watching pkg/darwin_amd64
13:39:48 watcher     | Watching public
13:39:48 watcher     | Watching src
13:39:48 watcher     | Watching src/site.org
13:39:48 watcher     | Watching src/site.org/application
13:39:48 watcher     | Watching src/site.org/application/controllers
13:39:48 watcher     | Watching src/site.org/application/controllers/web
13:39:48 watcher     | Watching src/site.org/system

修复

最后,我无法让它工作。但是,我使用这个插件创建了一个解决方案:

https://github.com/alexnj/SublimeOnSaveBuild

它试图在 save 上构建,我创建了这个构建系统(称为 GoLang):

{
    "shell_cmd": "sh /Users/acruz/go_projects/build_go.sh \"$project_path\"",
    "working_dir": "${project_path}"
}

而文件 build_go.sh 是:

#!/bin/sh
echo "Removing PKG folder if exists"
rm -Rf pkg

echo "Building application"
go build -o bin/app.bin main.go

echo "Killing application"
killall app.bin

echo "Running application ./bin/app.bin"
echo ""
echo "Debug information:"
echo ""

./bin/app.bin

一个@TODO 将在项目配置中定义二进制文件的名称......但对我来说这没问题。这样做的好处之一是您不必添加 -a 标志,这会使编译过程变慢,并且调试信息将显示在构建窗口中......

【问题讨论】:

    标签: build go refresh


    【解决方案1】:

    您可以更改 $GOPATH/src/github.com/pilu/fresh/runner/build.go#L13

    cmd := exec.Command("go", "build", "-o", buildPath(), root())
    

    成为

    cmd := exec.Command("go", "build", "-a", "-o", buildPath(), root())
    

    然后

    go install -a github.com/pilu/fresh
    

    flag -a 强制重新编译 .a 文件

    【讨论】:

    【解决方案2】:

    考虑到Pull Request 20 是关于“添加了ignore_dirs 设置”,您可以使用该新设置来明确忽略pkg 文件夹。

    ignore_dirs path1, path2, ...
    

    Check how that ignore_dirs path is checked:

    if info.IsDir() && !isTmpDir(path) {
        if _, ignore := ignorePaths[info.Name()]; (len(path) > 1 && 
           strings.HasPrefix(filepath.Base(path), ".")) || ignore {
            return filepath.SkipDir
    

    【讨论】:

    • 我在 runner.conf 文件中有这个:ignore_dirs: ./pkg 也试过这个ignore_dirs: pkg,但它不起作用
    • @Cito 是的,我不确定您需要放在那里的确切路径。这取决于info.Name() 的值。
    • 谢谢。我会继续努力的。
    猜你喜欢
    • 2021-03-21
    • 2018-03-26
    • 1970-01-01
    • 2016-05-31
    • 2012-01-29
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多