根據scons documentation,subst
方法將遞歸插值構造變量。然而,這似乎並沒有遞歸:遞歸變量替換env.subst
e = Environment(CPPDEFINES = ["FOOBAR=${foobar}"])
e["foo"] = 1
e["bar"] = "${foo + 1}"
e["foobar"] = "$${foo + ${bar}}"
# I want this to print "foobar: 3"
print "foobar:", e.subst("${foobar}")
e.Program("test.c")
打印:
scons: Reading SConscript files ...
foobar: ${foo + 2}
scons: done reading SConscript files.
scons: Building targets ...
gcc -o test.o -c -DFOOBAR=3 test.c
gcc -o test test.o
scons: done building targets.
foobar
編譯爲CPPDEFINES的一部分時被正確評估,而不是在print語句。我怎樣才能讓subst
完全評估foobar?
我目前無法對其進行測試,並且我無法在文檔中找到它,因此我無法發佈完整答案,但我認爲$$已被轉移到非易失性存儲器中,評估$。嘗試使用相同的代碼,但使用e [「foobar」] =「$ {foo + $ {bar}}」 –