在Makefile中设置环境变量

3
我该如何将setenv LD_LIBRARY_PATH .添加到我的Makefile中?当我在 Makefile 中使用相同的术语并使用echo $LD_LIBRARY_PATH .输出变量时,即使在另一个文件夹中也会收到结果而不是绝对路径,并且我会收到以下错误:setenv LD_LIBRARY_PATH .make: setenv:找不到命令
ll:libmem.v1

libmem.v1:
    gcc -g -c -fpic libmem.v1.c -Wall
    gcc -shared -o libmem.so libmem.v1.o
    gcc -lmem -L. -o main main.c -Wall 
    setenv LD_LIBRARY_PATH .

clean:
    rm -f libmem.v1
    rm -f *.py

我该怎么修复这个问题?
1个回答

2

你的问题不太清楚,所以我只能猜测你的意思。

setenv 命令是 C shell 的一部分,而该 shell 不是 Make 的默认 shell。你需要设置它:

SHELL = csh

如果您想使用变量,必须在设置变量的同一条命令中这样做,因为每个命令都在它自己的子shell中运行。另外,请记得转义"$"符号:

libmem.v1:
    setenv LD_LIBRARY_PATH . ; echo $$LD_LIBRARY_PATH

如果你希望LD_LIBRARY_PATH的值为绝对路径,而不是".",你必须将其设置为绝对路径:

libmem.v1:
    setenv LD_LIBRARY_PATH $(PWD) ; echo $$LD_LIBRARY_PATH

4
使用 csh 与 make 是行不通的。 csh 有一些完全奇怪和非标准的“特性”;例如,它会自行关闭各种文件描述符,这意味着并行构建无法正常工作。我本以为到了2013年,csh已经安静地死去并且应该死得其所,尤其涉及编写脚本。看到新手们仍在使用它,我感到非常沮丧 :-( 。赶快转换,否则为时已晚!! - MadScientist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接