多個可執行文件要構建從同一來源的多個可執行文件,我必須用不同的編譯器開關每個源文件的翻譯。對於每個變體,我都有一組要定義的定義。我想將生成的對象文件存儲到不同的子文件夾中。我有一個變量,保留所有變體的所有對象文件。現在我有問題要定義一個適當的靜態規則,以從源頭上構建的目標文件:產生來自相同來源
SOURCEEXT=.c
ALL_OBJECT_FILES := abcdefg/cctalkio.o tollcoll/cctalkio.o
source-from-object = $(addsuffix $(SOURCEEXT),$(basename $(notdir $(1))))
$(ALL_OBJECT_FILES): %.o: $(call source-from-object,%.o)
@echo $*.o
當我運行make abcdefg/cctalkio.o
,我得到:
make: *** No rule to make target 'abcdefg/cctalkio.c', needed by 'abcdefg/cctalkio.o'. Schluss.
同樣的,當我simpify的規則:
abcdefg/cctalkio.o: %.o: $(call source-from-object,%.o)
@echo $*.o
但是,當我改變規則:
abcdefg/cctalkio.o: %.o: $(call source-from-object,abcdefg/cctalkio.o)
@echo $*.o
我得到abcdefg/cctalkio.o
作爲輸出。所以幹似乎是abcdefg/cctalkio
,從而%.o
應該是一樣的abcdefg/cctalkio.o
。但是爲什麼兩種情況下的表現都不一樣?
當我「調試」源從對象功能:
debug:
@echo $(call source-from-object,/abcdefg/cctalkio.o)
我得到預期的結果cctalkio.c
,所以它看起來像功能正在工作。
棒的'$(信息源從對象參數:$ 1)'在你的源從對象功能的線路之一的開始,看看我在我的答案議論紛紛。 –
不錯,我有'%.o' :-) –