您可以在依賴模式下使用gcc
或cpp
。例如cpp -MM
產生的Makefile規則C文件:
$ cpp -MM abstract.c
abstract.o: abstract.c differ.h overrides.h debug.h settings.h abstract.h \
abstract/posix.h abstract/linux.h misc.h command.h queue.h list.h \
storage.h sqlite3.h
您可以分析此輸出,以獲得包括文件的列表。 cpp
也適用於C++源文件,所以你應該在這方面沒有問題。
但是,您應該注意提供與正常編譯時相同的預處理器選項。
編輯:
由於zip
更新與存檔中名稱相同的文件,你可以使用這樣的事情:
$ for i in *.c *.cc; do cpp -MM "$i"; done | tr ' ' '\n' | sort -u | grep -v ':$' | xargs -r zip test.zip
updating: test2.cc (deflated 61%)
adding: greater.c (deflated 38%)
adding: test.cc (deflated 61%)
adding: yyy.h (stored 0%)
adding: zzz.h (stored 0%)
$ for i in *.c *.cc; do cpp -MM "$i"; done | tr ' ' '\n' | sort -u | grep -v ':$' | xargs -r zip test.zip
updating: test2.cc (deflated 61%)
updating: greater.c (deflated 38%)
updating: test.cc (deflated 61%)
updating: yyy.h (stored 0%)
updating: zzz.h (stored 0%)
此存儲包含在指定源文件中的文件,以及與源文件本身一起存儲在zip
存檔中。請注意,您必須小心,以便使用正確的cpp
選項處理每個源文件。