[英]getting the target name in a function in prerequisites list [makefile]
我正在嘗試創建一個makefile,其中目標用於搜索.d中的依賴項
感謝這里和這里的答案,我發現.SECONDEXPANSION:
可以完成工作。 但是我遇到了一個問題,嵌套函數似乎很奇怪。 令人反感的規則如下所示:
.SECONDEXPANSION:
$(APPS): %: $$(patsubst %.c,%.o,$$(wildcard $$@.d/*.c)) $$(INC_OBJS)
$(CC) $(CFLAGS) $^ -o $@
代替:
gcc -Wall -std=c99 unittest.d/unittest.o common/cards.o -o unittest
這就是我想要的,我得到:
gcc -Wall -std=c99 unittest.d/unittest.c common/cards.o -o unittest
由於某種原因,沒有用.o
代替.c
。 看來我快到了,我只需要開始替換工作即可。 感謝所有幫助,如果您認為這是組織makefile的糟糕方法,那么歡迎您對此提出批評。
問題是您要嘗試同時將%
用作兩個不同的通配符,即靜態模式詞干和patsubst
通配符。 因此,Make進行桿的替換並得到以下信息:
$(patsubst unittest.c,unittest.o,$(wildcard $@.d/*.c))
然后patsubst
不執行任何操作,因為它找不到要替換的“ unittest.c”。 (請注意,“ unittest.d / unittest.c”中的“ unittest.c”不匹配,因為沒有通配符, patsubst
尋找完美匹配。)
不需要這是一個靜態模式規則(您永遠不會使用該功能),因此您可以消除該部分,其余部分應該可以工作:
.SECONDEXPANSION:
$(APPS): $$(patsubst %.c,%.o,$$(wildcard $$@.d/*.c)) $$(INC_OBJS)
$(CC) $(CFLAGS) $^ -o $@
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.