0
我有一個使用模式特定變量和目標特定變量來控制編譯設置的makefile。單個目標可以指定特定於目標的變量來覆蓋更一般的編譯設置。然而,有些設置是互斥的,我受制於如何在makefile中添加條件來調整基於另一個的設置,已針對配方設置了目標特定的變量。如何在設置目標特定變量後執行條件?
我的生成文件上的IBM i(GNU讓4.0),其中有許多人不熟悉運行,所以這裏是一個製造的例子,希望能更有意義,最:
.PHONY: all
all: object1.o object2.o
%.o: TYPE = solid
%.o: ITEM = stone
%.o: %.c
compile_command -type $(TYPE) -item $(ITEM)
object1.o: ITEM = helium
object1.o: object1.c
object2.o: ITEM = water
object2.o: object2.c
模式特定
對於所有.o
文件,變量爲
TYPE
和
ITEM
設置默認值。
object1.o
重設
ITEM
爲「氦氣」。如何插入條件以便如果
ITEM
等於「氦氣」,那麼
TYPE
可以自動設置爲「氣體」?同樣,如果
ITEM
等於「水」,那麼我們如何自動將
TYPE
設置爲「液體」?目標是避免必須明確指定
TYPE
作爲目標特定變量;它應該能夠由規則導出。
所以這聽起來像我的變量需要在配方中使用,這是當你做這個過程 - 因爲那時所有的目標特定變量已經設置。是否可以在條件內設置其他變量的值?我得到,你可以說'x = $(some_expression_that_calculates_x)',但是有沒有辦法來粘貼一個條件,基本上說'如果x ='some_value'然後設置y 3和z 4'? – smeep
你可以用'eval'來做到這一點,但這並不容易。它也可能不是做事的最佳方式:例如,您可能會考慮使用計算的變量名稱。這聽起來不像你上面要問的同一個問題,而且對於評論來說答案太複雜。我建議你開始一個不同的SO問題,詢問你想要的真實信息,如果這個問題沒有真正反映這個問題。 – MadScientist