linux - 使用makefile执行程序时是否可以删除 "./"?

标签 linux makefile

我有一个生成可执行文件“submission”的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

最佳答案

这与 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 将使您可以在当前所在的目录中运行可执行文件,而无需其路径!

关于linux - 使用makefile执行程序时是否可以删除 "./"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57927039/

相关文章:

linux - 添加-apt-存储库 ppa :ferramroberto/java how to add in a bash script

c - 使 GtkStatusbar 的文本可选择

linux - 在 Ubuntu 18 中使用 Ubuntu 16 的共享库

python - 从父目录导入子目录模块时出现 Sphinx ImportError

makefile - GNU make : “Nothing to be done for ' target'” vs. “' 目标'是最新的”

javascript - 在浏览器中模拟linux终端

java - 在 Windows 上用 map reduce 程序创建一个 jar 文件,然后在 linux (hadoop) 上运行它

makefile - LaTeX引用和Makefile

c++ - 在 Qt 项目中使用 STXXL

Android构建系统: How to include prebuilt files from a . tar文件?