要cd到目录中并运行go应用程序的Makefile目标

9ceoxa92  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(125)

我需要cd到一个特定的目录,然后简单地运行go run main.go并启动我的应用程序。

stand-app: |
    $(info Booting up the app for local testing)
    cd $(PWD)/cmd/myapp
    go run main.go

当我运行目标时,我得到以下结果:

go run main.go
stat main.go: no such file or directory
make: *** [stand-app] Error 1

但是位置是正确的,我可以简单地通过cd到那个目录并运行命令来完成这些步骤。我哪里出错了?
谢谢你

6yt4nkrj

6yt4nkrj1#

配方中的每一个逻辑行都在不同的shell中运行。当前工作目录是shell的一个属性;当shell消失时,对工作目录的任何更改也会消失。因此,您的cd ...是no-op:它将更改该shell中的工作目录,然后退出该shell,并使用原始工作目录启动下一个shell。
将这两行合并为一个逻辑行;也许是这样的:

stand-app:
        $(info Booting up the app for local testing)
        cd $(PWD)/cmd/myapp && go run main.go

只是提醒:PWD对make来说并不特殊。如果调用make的shell设置了它,它就有值;如果调用make的shell没有设置它,它就没有值(或者如果在父shell中没有正确设置它,它就有错误的值)。你可能想使用make的CURDIR变量来代替:

stand-app:
        $(info Booting up the app for local testing)
        cd '$(CURDIR)/cmd/myapp' && go run main.go

相关问题