在GNU make中文手冊這本書中,3.14節(jié)講到了依賴文件的自動生成,如下圖

圖中的規(guī)則對C源文件和Makefile在同一目錄,是正確的。但是不在同一目錄的又希望依賴文件在對應(yīng)的目錄下,比如src/log/log_file.c,希望依賴文件log_file.d生成在src/log/下。因為gcc(aix平臺xlc編譯器亦如此)生成的依賴文件內(nèi)容中目標(biāo)文件名沒有帶路徑,例如下所示
log_file.o: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
src/log/../base/io_ext.h
所以sed就找不到src/log/log_file.o而替換了,改正后的規(guī)則如下
%.d: %.c
$(CC) $(CFLAGS) $(INCS) $< $(MFLAGS) $@.$$$$;\
sed 's,$(*F).o[ :]*,$*.o $@: ,g' < $@.$$$$ > $@;\
$(RM) $@.$$$$
該規(guī)則對C源文件和Makefile在同一目錄也適合,生成后的依賴文件內(nèi)容如下
src/log/log_file.o src/log/log_file.d: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
src/log/../base/io_ext.h
posted on 2018-11-16 12:08
春秋十二月 閱讀(861)
評論(0) 編輯 收藏 引用 所屬分類:
System