【发布时间】:2016-10-13 15:04:40
【问题描述】:
下面是我的makefile:
src/config-comp/%.o: ../src/config-comp/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
gcc-4.8 -std=gnu11 -DDEBUG=$(DEBUGOPT) -I"$(ROOT_DIR)/../.local/include" -O0 -g3 -Wall $(GPROF) -c -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
在src/config-comp中,我有两个C源文件,一个是config-comp.c,另一个是config-proxy.c。我读过 GNU make book 这么说
"如果一个模式规则有多个目标,make 知道该规则的 recipe 负责制作所有的目标。食谱是 只执行一次以生成所有目标。”
但是,我的输出如下:
Building file: ../src/config-comp/config-comp.c
Invoking: GCC C Compiler
gcc-4.8 -std=gnu11 -DDEBUG=0 -I"/home/cheng/crane/libevent_paxos/target/../.local/include" -O0 -g3 -Wall -c -MMD -MP -MF"src/config-comp/config-comp.d" -MT"src/config-comp/config-comp.d" -o "src/config-comp/config-comp.o" "../src/config-comp/config-comp.c"
Finished building: ../src/config-comp/config-comp.c
Building file: ../src/config-comp/config-proxy.c
Invoking: GCC C Compiler
gcc-4.8 -std=gnu11 -DDEBUG=0 -I"/home/cheng/crane/libevent_paxos/target/../.local/include" -O0 -g3 -Wall -c -MMD -MP -MF"src/config-comp/config-proxy.d" -MT"src/config-comp/config-proxy.d" -o "src/config-comp/config-proxy.o" "../src/config-comp/config-proxy.c"
Finished building: ../src/config-comp/config-proxy.c
这意味着配方已经执行了两次,对吧?但是根据上面的引用,它应该只执行一次。
【问题讨论】:
标签: makefile