gpt4 book ai didi

makefile 分配命令到

转载 作者:行者123 更新时间:2023-12-04 19:58:01 24 4
gpt4 key购买 nike

我可能很愚蠢,但我无法在我的 Makefile 中进行最基本的变量赋值。

TEST = $(pwd);

all:
echo $(TEST)

当我在 FreeBSD (v9.1) 中从 Bash (v4.2.42) 运行“make all”时,我得到:

echo

不知道我在搞砸什么。我还尝试使用 $(shell ...) 分配变量,结果相同。

如果我使用反引号 (`),则基本赋值有效,但它不存储结果,而是存储命令。这在以下示例 Makefile 中中断:

SERVERIP = `ifconfig em0 | grep -E 'inet.[0-9]' | awk '{ print $$2}'`

all:
echo $(SERVERIP)
sed -e 's/%LISTENIP%/${SERVERIP}/g' test.conf > work/test.conf.tmp

结果是:

[pete@pete] ~/make
echo `ifconfig em0 | grep -E 'inet.[0-9]' | awk '{ print $2}'`
10.128.28.151
sed -e 's/%LISTENIP%/`ifconfig em0 | grep -E 'inet.[0-9]' | awk '{ print $2}'`/g' test.conf > work/test.conf.tmp
sed: 1: "s/%LISTENIP%/`ifconfig ...": unescaped newline inside substitute pattern
*** [all] Error code 1

您可以看到基本的变量赋值似乎有效,但是当您将结果插入 sed 时,它会插入整个命令而不是结果,这会中断!

有什么想法吗?

皮特。

最佳答案

也许答案为时已晚,但我希望我能帮助(其他人)。

如果你不想安装 GNU 的 make,你可以使用 !=:

TEST!=pwd
all:
echo ${TEST}

会起作用。解释很简单,请仔细阅读FreeBSD's man make ,尤其是 “VARIABLE ASSIGNMENTS” 部分中的 “变量赋值修饰符”:

Variable assignment modifiers

The five operators that can be used to assign values to variables are as follows: ...

!= Expand the value and pass it to the shell for execution and assign the result to the variable. Any newlines in the result are replaced with spaces.

关于makefile 分配命令到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com