2014-09-10 35 views
0

這裏是我的makefile片段:打印CFLAGS在GNU使exaclty一次如果源文件已更改

all: $(TARGET) 

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

$(TARGET): $(C_OBJS) 
    @ $(AR) rus [email protected] $(C_OBJS); 

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

展望未來,我要

  1. 打印CFLAGS一次如果編譯發生。
  2. 如果以前的構建沒有進行任何修改,則獲取make: Nothing to be done for "all"消息。在這種情況下,打印CFLAGS是可選的。

我覺得,它可以通過保持一個櫃檯內部$(C_OBJS): %.o: %.c但是有沒有更好的方法來實現這一目標? 我知道這是一個非常具體的問題,但任何幫助將不勝感激。

+0

加上'print_cflags'作爲'訂單only'前提,以'$(TARGET)'規則? – 2014-09-10 15:21:05

+0

@EtanReisner感謝您的評論,但通過將'print_cflags'添加爲'僅限訂單'的先決條件'make:無需完成所有「消息。 – govind 2014-09-10 15:36:03

+0

嗯...好的。你總是可以停止使用make目標,並將打印結果貼在'$(TARGET)'規則體中。 – 2014-09-10 15:39:38

回答

1

Etan給出了很多不錯的選擇。這裏有另外一個,假設你的GNU版本提出的是新的,足以支持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" 
相關問題