我有這樣的隱含規則:GNU讓 - 如何設置一個隱含的模式爲前提
%.so: %.so.5
qnx_ln $< [email protected]
我意識到另一個目標,我必須讓所有.so
文件這一目標的前提。
我嘗試這樣做:
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so
...
但我得到的輸出
***沒有規則,使目標 '%。所以',通過 'makegen' 需要。停止。
我有這樣的隱含規則:GNU讓 - 如何設置一個隱含的模式爲前提
%.so: %.so.5
qnx_ln $< [email protected]
我意識到另一個目標,我必須讓所有.so
文件這一目標的前提。
我嘗試這樣做:
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so
...
但我得到的輸出
***沒有規則,使目標 '%。所以',通過 'makegen' 需要。停止。
%
前提圖案只能在靜態和隱式圖案規則,在那裏它們在目標的相應的部分%
匹配使用;在常規規則%
中使用時是文字字符。
你需要從字面上指定的依賴關係,除非有一定的源文件名和文件名.so
,你可以利用,想必你已經做任一給.so
文件擺在首位鏈接之間的一些對應。
正如前面指出的,不,你不能這樣做,因爲這不是先決條件模式的工作方式。也許你給了以下的一個念頭,拒絕它,但我懷疑你會發現下面一個足夠接近的配合:
%.so.target: %.so.5
echo $< >> $(BUILD)/so.targets
SO_TARGETS=$(basename $(shell cat $(BUILD)/so.targets))
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(SO_TARGETS)
也許你正在尋找一個規則相匹配的每一個現有的* .so文件?
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so)
...
但是,如果有圖案,其可能產生尚未產生這些文件* .so文件,他們將(顯然)不會被通配符,它只是檢查現有文件匹配。如果這是你真正想要完成的,你可能會想要枚舉實際的文件,這種或那種方式。
如果在構建時它們不存在,如何知道它需要哪個.so文件?你基本上是在告訴make「對於目標makegen你需要一些.so文件,處理它」。您必須爲其提供一個包含所需的所有.so文件名稱的變量。 – Tim
%.so目標可以這樣翻譯:「對於任何您遇到的.so文件,您都需要這樣做,而且您可以這樣做」。這裏你的makegen目標是「對於makegen,你需要這個和任何.so文件」。它沒有意義 – Tim
[如何設置Makefile目標取決於模式的先決條件?](https://stackoverflow.com/questions/39829344/how-to-set-a-makefile-target-depend-on -pattern-先決條件) –