簡體   English   中英

在先決條件列表中的函數中獲取目標名稱[makefile]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM