我可能很笨,但我不能在我的Makefile中做最基本的變量賦值。makefile將命令分配給
TEST = $(pwd);
all:
echo $(TEST)
了FreeBSD(9.1)當我運行 「讓所有」 從巴什(v4.2.42)我得到:
echo
不知道我搞砸了。我也嘗試使用$(shell ...)分配變量,獲得相同的結果。
如果我使用back tick(`),那麼基本賦值工作,但它不存儲結果,它存儲命令。這打破了下面的例子中的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
結果是:
[[email protected]] ~/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的,它插入整命令而不是結果,這打破了!
任何想法?
皮特。
我在第二個例子(sed)上測試了它,但它實際上並沒有提供命令的值,而是命令本身,它打破了sed。即與上面相同的結果。 – Pete 2013-03-23 14:42:35
謝謝你的配偶。我複製了:=例子,但不幸的是它回顯了一個空行,sed替換了LISTENIP標記。 – Pete 2013-03-23 15:26:37
你在FreeBSD上?也許你沒有GNU'make'?我確實指出,解決方案是使用GNU'make'擴展到'make'。 – 2013-03-23 18:14:56