在GNU makefile中,如果輸入中有一個輸入變量爲一個值(假設爲「true」),當它不是時,變量等於兩個值中的一個,並等於另一個值(「false」)。如何使用if /或/和函數檢查變量是否等於兩個值中的一個
感謝this SO answer我已經瞭解了and
和or
函數,不久之後我發現了if
函數。這些函數似乎在我的make版本中可用,所以我想使用它們。我想編寫類似的東西:
TEST_INPUT = `hostname`
TEST_OUTPUT = $(if $(or $(eq $(TEST_INPUT),hal9000),
$(eq $(TEST_INPUT),pipboy)),true,false)
可惜我不能,因爲我無法找到預期eq
功能的任何明顯的形式。我能夠實現我想用什麼filter
功能:
TRUE_HOSTS = hal9000 pipboy
TEST_OUTPUT = $(if $(filter $(TEST_INPUT),$(TRUE_HOSTS)),true,false)
或subst
功能:
TEST_OUTPUT = $(if $(and $(subst hal9000,,$(TEST_INPUT)),
$(subst pipboy,,$(TEST_INPUT))),
false,true)
但對我來說不是一個很好看的也不是可讀的代碼。是否有更接近第一個例子的解決方案(使用不存在eq
函數的解決方案)?也許我不明白if
,and
和or
函數的目的?
感謝您確認我沒有提供比較功能的感覺。你的'eq'函數也比我的解決方案更聰明,更易讀(我會無恥地使用它)。謝謝:) –