2016-08-11 16 views
0

我有這樣的隱含規則:GNU讓 - 如何設置一個隱含的模式爲前提

%.so: %.so.5 
    qnx_ln $< [email protected] 

我意識到另一個目標,我必須讓所有.so文件這一目標的前提。

我嘗試這樣做:

makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so 
    ... 

但我得到的輸出

***沒有規則,使目標 '%。所以',通過 'makegen' 需要。停止。

+0

如果在構建時它們不存在,如何知道它需要哪個.so文件?你基本上是在告訴make「對於目標makegen你需要一些.so文件,處理它」。您必須爲其提供一個包含所需的所有.so文件名稱的變量。 – Tim

+0

%.so目標可以這樣翻譯:「對於任何您遇到的.so文件,您都需要這樣做,而且您可以這樣做」。這裏你的makegen目標是「對於makegen,你需要這個和任何.so文件」。它沒有意義 – Tim

+0

[如何設置Makefile目標取決於模式的先決條件?](https://stackoverflow.com/questions/39829344/how-to-set-a-makefile-target-depend-on -pattern-先決條件) –

回答

2

%前提圖案只能在靜態和隱式圖案規則,在那裏它們在目標的相應的部分%匹配使用;在常規規則%中使用時是文字字符。

你需要從字面上指定的依賴關係,除非有一定的源文件名和文件名.so,你可以利用,想必你已經做任一給.so文件擺在首位鏈接之間的一些對應。

0

正如前面指出的,不,你不能這樣做,因爲這不是先決條件模式的工作方式。也許你給了以下的一個念頭,拒絕它,但我懷疑你會發現下面一個足夠接近的配合:

%.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) 
0

也許你正在尋找一個規則相匹配的每一個現有的* .so文件?

makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so) 
    ... 

但是,如果有圖案,其可能產生尚未產生這些文件* .so文件,他們將(顯然)不會被通配符,它​​只是檢查現有文件匹配。如果這是你真正想要完成的,你可能會想要枚舉實際的文件,這種或那種方式。