【问题标题】:I am trying to add PATH to makefile in Linux我正在尝试将 PATH 添加到 Linux 中的 makefile
【发布时间】:2021-10-19 14:21:40
【问题描述】:

我有一条路:

export PATH=~icar/public/course/p6330/mpich4i/bin:$PATH

当我将此应用到命令行时,它会成功导出此目录中的文件或将我的当前目录路径设置为其内容。我试图在我的 makefile 中做同样的事情,但没有取得太大的成功。以下是我根据在网上找到的答案得出的结论,但我相信我遗漏了一些东西。

PATH = $PATH:~icar/public/course/p6330/mpich4i/bin:$PATH

all: p4

export PATH

p4: p4.c
    mpicc -g -std=gnu99 -Wall -Werror p4.c -o p4

clean:
    rm -rf *.o p4

【问题讨论】:

  • 你是不是故意在$PATH: ~icar/public/...里面加了空格?此外,您可能需要将 PATH 括在括号中(如 $(CC)$(LIBS))。另一种方法是使用完全限定的路径。
  • 我去掉了被注释掉的不必要的行,去掉了空白。我仍然犯错误
  • “使用完全合格的路径”是不是这样的意思:export PATH=~icar/public/course/p6330/mpich4i/bin:$PATH
  • ~icar 是否意味着~/icar?您的 sn-p 将添加 $PATH 两次。您可能应该删除其中一个。
  • 我不确定如何将它直接写入makefile。但是这一行在我的命令行中有效: export PATH=~icar/public/course/p6330/mpich4i/bin:$PATH 我不能直接将此行添加到我的makefile,因为它不起作用。这样做的正确方法是什么?

标签: c makefile


【解决方案1】:

首先,$PATH 之类的值是 shell 变量引用,并且您在 makefile 中工作,所以这不起作用。

其次,正如评论者所提到的,~ 之类的主目录标记也是 shell 功能。

第三,在 make 中使用像 = 这样的简单赋值将变量分配给包含对其自身的引用的值是非法的:这会导致无限递归(实际上 make 会检测到这一点并且会失败)。

要做你想做的事,这样做:

PATH := $(PATH):/home/icar/public/course/p6330/mpich4i/bin

(假设用户icar的主目录为/home/icar

【讨论】:

  • 谢谢,我不明白 makefile 中不允许使用(~、= 和 $PATH)。但它现在适用于您的建议。
猜你喜欢
  • 2021-10-12
  • 2012-02-15
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2011-08-07
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多