2016-06-07 121 views
0

我不知道这将如何工作,但我基本上试图编写一个命令行应用程序,我可以运行命令和子命令。我使用这个流行的第三方库,用于解析命令行参数:转:命令行应用程序安装

https://github.com/urfave/cli

我的问题是我有一个项目文件夹,我的。去的文件会生活:

MyProject 

所以即使在我main.go文件中的代码,用他们的例子,我有:

package main 

import (
    "fmt" 
    "os" 

    "github.com/urfave/cli" 
) 

func main() { 
    app := cli.NewApp() 
    app.Name = "greet" 
    app.Usage = "fight the loneliness!" 
    app.Action = func(c *cli.Context) error { 
    fmt.Println("Hello friend!") 
    return nil 
    } 

    app.Run(os.Args) 
} 

当我运行go install

在我的$ GOPATH/bin目录中,我实际上获取了MyProject。然后,当我从终端运行MyProject,我得到

USAGE: 
myproject [global options] command [command options] [arguments...] 

但在现实中,我不首先需要的myproject命令。有没有办法通过命令行应用程序或第三方包来创建命令行应用程序,以便我可以从命令行运行greet而不是myproject作为第一个命令?谢谢。

回答

2

检查的go build command

go build [-o output] [-i] [build flags] [packages] 

文档当编译一个单一的主包装,打造写入导致 可执行的第一源文件的名字命名的输出文件(“走出去 构建ed.go ('go build unix/sam'写'sam'或'sam.exe')或源代码 目录。编写Windows可执行文件时会添加'.exe' 后缀。

编译多个包或单个非主包时,生成 会编译包,但会丢弃生成的对象,只能提供 作为可以构建包的检查。

-o标志,编译一个包时只被允许,强制 构建写生成的可执行文件或对象到指定的输出 文件,而不是在最后两个段落 描述的默认行为。

尝试建立像这样go build -o greet,如果你希望它是来自世界各地的访问,请不要忘记将生成的可执行文件添加到您的$PATH


或者,你可以1)创建一个别名;或2)符号链接到实际的可执行:

  1. alias greet='myproject'
  2. ln -s $GOPATH/bin/myproject greet(该链接将在当前目录中创建)
相关问题