在Makefiles先决条件的变量中使用%steam

在Makefiles先决条件的变量中使用%steam,makefile,gnu-make,Makefile,Gnu Make,我经常发现自己不想在菜谱中提及茎,而想在先决条件中提及茎 例如,我在这里玩一些python代码,它以递归方式扫描可执行源代码的.cpp和.hpp文件,以检测它所依赖的对象。脚本本身工作得很好,但我不知道如何将它与makefile连接起来,因为输入不同 $(TESTS): bin/tests/%_a : bin/obj/%.o $(foreach var, $(shell python3 ./autoInc.py ./src/lib/%.cpp), bin/obj/$(var).o) @e

我经常发现自己不想在菜谱中提及茎,而想在先决条件中提及茎

例如,我在这里玩一些python代码,它以递归方式扫描可执行源代码的.cpp和.hpp文件,以检测它所依赖的对象。脚本本身工作得很好,但我不知道如何将它与makefile连接起来,因为输入不同

$(TESTS): bin/tests/%_a : bin/obj/%.o $(foreach var, $(shell python3 ./autoInc.py ./src/lib/%.cpp), bin/obj/$(var).o)
    @echo "#---------------------------"
    @echo "# Linking $@ "
    $(CC) -o $@ $^
(此处,makefile执行
/autoInc.py./src/lib/%.cpp
而不进行替换)

这是以下形式:

.SECONDEXPANSION:

$(TESTS): %_a : $$(foreach var, $$(shell whatever $$*.cpp), $$(var).o)
    ...
我建议您在尝试合并python之前使用一个非常简单的玩具规则