Unten ist mein Make-Datei:Makemusterregel mit mehreren Zielen
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 "[email protected]" "$<"
@echo 'Finished building: $<'
@echo ' '
In src/config-comp, ich habe zwei Quelldateien C, ist eine config-comp.c und das andere ist config-Proxy .c. Ich las GNU Buch machen sagen, dass
„Wenn ein Muster Regel mehrere Ziele hat, machen weiß, dass die Rezept-Regel für die Herstellung alle Ziele verantwortlich ist. Das Rezept nur einmal ausgeführt ist, um alle Ziele zu machen . "
jedoch meine Ausgabe ist wie folgt:
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
Das bedeutet, das Rezept zweimal ausgeführt wurde, nicht wahr? Aber laut dem obigen Zitat sollte es nur einmal ausgeführt werden.