使用makefile执行程序时是否可以删除“ ./”?

时间:2019-09-13 16:08:17

标签: linux makefile

我有一个生成可执行文件“提交”的makefile,我想通过键入“ submission [arguments]”而不是“ ./submission [arguments]”来运行此文件,如果可能的话,该怎么办?

CXX = g++
CXXFLAGS= -g -std=c++11 -Wall -pedantic

CODE_SRC = code.cpp

CODE_OBJ = code.o

code: $(CODE_OBJ)
    $(CXX) -o submission $(CXXFLAGS) $(CODE_OBJ) -lm
    @echo "-----------DONE -------------"
.cc.o:
    $(CC) $(CFLAGS)  -c $*.cpp
clean:
    rm -f *.o submission
clobber:
    rm -f *.o

2 个答案:

答案 0 :(得分:1)

  

我想通过键入submission [arguments]来运行此文件。

如果您修改了一个规则并添加了另一个规则,则可以使用make run_submission运行它:

submission: $(CODE_OBJ) # Uses correct target name.
    $(CXX) -o $@ $(CXXFLAGS) $(CODE_OBJ) -lm

run_submission: submission # Builds submission first.
    ./submission <args>

.PHONY: clean clobber run_submission

答案 1 :(得分:1)

这与Makefile无关,但与您的Shell如何确定您可能要运行的程序有关。当您运行诸如ls之类的命令时,shell会由于PATH环境变量而知道此程序在哪里。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

因此,在这种情况下,我的ls程序必须位于以下目录之一:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin

如果它不在这些目录之一中,则我必须做你要做的事情并指定它的路径。

就我而言:

$ /bin/ls

在您的情况下,您的程序不在PATH中,因此您需要指定它所在的位置,即您的当前目录(即./的意思)。

如果要在不指定路径的情况下运行该程序,则需要将程序放在PATH中的目录中。通常,您可能不想将随机可执行文件拖放到默认目录之一中。相反,您可以将新目录添加到PATH

在您的~/.bashrc~/.bash_profile中,添加以下行:

export PATH="~/bin:$PATH"

您可以使用任意路径替换~/bin,但我通常希望为自己的可执行文件放一个位置。然后,您需要将可执行文件放入该目录(如果它与已经存在的目录不同)。您需要重新打开终端以更新PATH。之后,您应该能够按预期运行程序。

趣闻:将./添加到PATH中将使您可以在没有可执行文件路径的情况下运行可执行文件,无论它们位于您当前所在的目录中!