在makefile中使用setenv

时间:2011-10-18 11:22:13

标签: linux makefile gnu-make

我正在尝试在我的makefile中使用setenv变量,但是当我执行make文件时,它会找到setenv:command not found。

我该如何使用它?

实际上我想运行一个设置多个环境变量的shell脚本。

由于列表非常庞大,除了使用脚本之外我没有其他选择。我不能手动设置它们 abcd:= / xx / yy / zz

请建议。

P.S。同样的命令 setenv xxx yyy在shell中运行良好 当我直接使用makefile或者使用带有此命令的脚本的makefile时,它就会失败。 “

5 个答案:

答案 0 :(得分:3)

为什么不使用导出命令?

答案 1 :(得分:3)

运行脚本来设置环境变量将不起作用,因为shell运行一个单独的进程&不会反映在你当前的shell中。您需要source shell脚本。您可以根据自己的shell使用source.。以下是一个供您参考的示例,其中setvar.sh设置变量& print.sh打印出来;在Makefile(mkfile)中,setvar.sh使用.

获取
$ cat setvar.sh 

export TEST=ABC 

$ cat print.sh 

echo $TEST
$ cat mkfile
test:
    . ./setvar.sh && ./print.sh

.SILENT:test
$ make -f mkfile
ABC

你也可以include我猜,例如,

$ cat mkfile2 
include setvar.sh
test:
    ./print.sh

.SILENT:test
$ make -f mkfile2
ABC

希望这有帮助!

答案 2 :(得分:0)

答案 3 :(得分:0)

我认为setenv不是sh shell的内置函数。如果您使用的是GNU Make,则使用的是默认shell。在你的情况下,你可能想要使用不同的shell,比如bash。您可以通过将makefile中的SHELL变量设置为您想要的内容来完成此操作:

SHELL := /usr/bin/bash

有关GNU Make手册的详细信息,请查看this部分。它详细说明了SHELL变量的不同行为以及它是如何实现的,或者不是从shell继承的make在不同平台上调用。

编辑:我同意其他海报的暗示,你可能没有按照你认为的那样设置环境变量,也不会使用setenv命令。我只是回答你原来的问题。要了解make文件中的变量,请在GNU Make手册中查看these other sections

答案 4 :(得分:-1)

export MY_VAR := "/package/your_path"