Разделение неявного правила GNU make

#gnu-make

#gnu-make

Вопрос:

У меня есть следующее неявное правило:

 CFLAGS=-I../tcp/ -I../libip_udp/ -g -Wall                                        
LDLIBS=framework.o ../tcp/libtcp.a ../libip_udp/libip.a                          

%.run : %.c $(LDLIBS)                                                            
        $(CC) $< $(LDLIBS) -o $@ $(CFLAGS)                                       
        ./$@
  

Если я запущу make foo.run , он скомпилирует foo.c и выполнит foo.run. Однако повторный запуск make foo.run ничего не даст. Как я могу разделить неявное правило таким образом, чтобы оно компилировалось при необходимости, но выполнялось всегда?

Ответ №1:

Например:

 CFLAGS=-I../tcp/ -I../libip_udp/ -g -Wall
LDLIBS=framework.o ../tcp/libtcp.a ../libip_udp/libip.a

.SECONDARY:

%.run : %.c $(LDLIBS)
        $(CC) $< $(LDLIBS) -o $@ $(CFLAGS)

exec.%: %
        ./$<
  

Теперь просто запустите его

 make exec.foo.run