關於make依賴檔案的自動生成
阿新 • • 發佈:2018-12-21
在GNU make中文手冊這本書中,3.14節講到了依賴檔案的自動生成,如下圖
圖中的規則對C原始檔和Makefile在同一目錄,是正確的。但是不在同一目錄的又希望依賴檔案在對應的目錄下,比如src/log/log_file.c,希望依賴檔案log_file.d生成在src/log/下。因為gcc(aix平臺xlc編譯器亦如此)生成的依賴檔案內容中目標檔名沒有帶路徑,例如下所示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而替換了,改正後的規則如下
%.d: %.c
$(CC) $(CFLAGS) $(INCS) $< $(MFLAGS) [email protected]$$$$;\ sed 's,$(*F).o[ :]*,$*.o [email protected]: ,g' < [email protected]$$$$ > [email protected];\ $(RM) [email protected]$$$$
該規則對C原始檔和Makefile在同一目錄也適合,生成後的依賴檔案內容如下
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 春秋十二月 閱讀(177) 評論(0) 編輯 收藏 引用 所屬分類: System
圖中的規則對C原始檔和Makefile在同一目錄,是正確的。但是不在同一目錄的又希望依賴檔案在對應的目錄下,比如src/log/log_file.c,希望依賴檔案log_file.d生成在src/log/下。因為gcc(aix平臺xlc編譯器亦如此)生成的依賴檔案內容中目標檔名沒有帶路徑,例如下所示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而替換了,改正後的規則如下
%.d: %.c
$(CC) $(CFLAGS) $(INCS) $< $(MFLAGS)
該規則對C原始檔和Makefile在同一目錄也適合,生成後的依賴檔案內容如下
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