如果源文件已更改,则在GNU中打印CFLAGS会产生一次exaclty

时间:2014-09-10 15:17:09

标签: gnu-make

以下是我的makefile的片段:

all: $(TARGET) 

$(C_OBJS): %.o: %.c
    @ echo -n "Compiling " $*.c;
    @ $(CC) -c $(CFLAGS) $*.c -o $*.o
    @ echo " ...... Done"

$(TARGET): $(C_OBJS)
    @ $(AR) rus $@ $(C_OBJS);

print_cflags:
    @ echo "CFLAGS: " $(CFLAGS) "\n"

前进,我想

  1. 如果进行编译,请打印CFLAGS 一次
  2. 如果以前的版本没有进行任何修改,请获取make: Nothing to be done for "all"消息。在这种情况下,打印CFLAGS是可选的。
  3. 我觉得,可以通过在$(C_OBJS): %.o: %.c内部设置一个计数器来实现。但有没有更好的方法来实现这一目标? 我知道这是一个非常具体的问题,但任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Etan提供了许多不错的选择。这是另一个,假设您的GNU make版本足够新以支持eval

print_CFLAGS := $(CFLAGS)

$(C_OBJS): %.o: %.c
        @ $(if $(print_CFLAGS),echo "CFLAGS: $(print_CFLAGS)" $(eval print_CFLAGS:=))
        @ echo -n "Compiling " $*.c;
        @ $(CC) -c $(CFLAGS) $*.c -o $*.o
        @ echo " ...... Done"