为什么Makefile中导出的变量不能被可执行文件接收?

8
我有一个makefile,其中我正在导出变量,这些变量将由可执行文件接收,但出乎意料的是,可执行文件没有接收到导出的值。
请帮助我。
31 test:
32         @ echo
33         @ echo "Testing Electric Fence."
34         @ echo "After the last test, it should print that the test has PASSED."
35         ./eftest
36         ./tstheap 3072
37         export EF_ERRTRACK_START=3
38         export EF_ERRTRACK_END=5
39         ./time-interval-measurement-test
40         @ echo
41         @ echo "Electric Fence confidence test PASSED." 
42         @ echo
< p > time-interval-measurement-test 是一个可执行的C程序,它应该接收导出的变量,但是它没有接收到。请帮助我。

2个回答

11

如果我没记错,Makefile中的每一行都是单独的shell进程。因此,shell-export无法用于多个进程:一种解决方法是将它们放在同一行中:

test:
         @ echo
         @ echo "Testing Electric Fence."
         @ echo "After the last test, it should print that the test has PASSED."
         ./eftest
         ./tstheap 3072
         EF_ERRTRACK_START=3 EF_ERRTRACK_END=5 ./time-interval-measurement-test
         @ echo
         @ echo "Electric Fence confidence test PASSED." 
         @ echo

或者使用 '\ ' 进行换行转义

test:
        [..]
        EF_ERRTRACK_START=3 \
        EF_ERRTRACK_END=5 \
        ./time-interval-measurement-test

这样,ENV变量就能够在./time-interval-measrument中使用了。


让我尝试两种方法,然后快速告诉你结果。 - RajSanpui
抱歉,发生了这样的情况。导出 EF_ERRTRACK_START=3 导出 EF_ERRTRACK_END=5 ./time-interval-measurement-test/bin/sh:第0行: export: `./time-interval-measurement-test': 不是一个有效的标识符制作: *** [test] 错误1 - RajSanpui
测试电子围栏。在最后一次测试后,应该打印出测试已经通过。./eftest Electric Fence 2.1 版权所有 (C) 1987-1998 Bruce Perens../tstheap 3072 Electric Fence 2.1 版权所有 (C) 1987-1998 Bruce Perens.export EF_ERRTRACK_START=3 export EF_ERRTRACK_END=5 ./time-interval-measurement-test/bin/sh: 第0行: export: `./time-interval-measurement-test':不是有效的标识符make: *** [test] 错误 1-bash-3.2# make test - RajSanpui
谢谢,它起作用了,我忘记在变量名前删除 export - RajSanpui

2
我曾经问过一个类似的问题,但不是完全相同的情况。链接如下:如何实现Makefile共享变量 理想情况下,你导出的变量应该传递给子进程,我想知道你的子shell是否与父shell相同。
请尝试以下操作: export EF_ERRTRACK_START=3; export EF_ERRTRACK_END=5; ./time-interval-measurement-test

谢谢,是的,使用分号也可以。为你点赞。除了第一种方法,我还知道了一种新的方法。 - RajSanpui

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