我有一個具有生成文件且具有中斷依賴關係的項目。除了用手或用手寫的perl腳本檢查每個源文件外,是否有任何已知最好的方法來生成可供makefile使用的項目的依賴項列表?爲C/C++中的項目生成生成文件的依賴關係
31
A
回答
42
http://make.paulandlesley.org/autodep.html有很好的解決方案。
絕對。 g ++ -MM將生成一個GMake兼容的依賴列表。我用的是這樣的:
# Add .d to Make's recognized suffixes.
SUFFIXES += .d
#We don't need to clean up when we're making these targets
NODEPS:=clean tags svn
#Find all the C++ files in the src/ directory
SOURCES:=$(shell find src/ -name "*.cpp")
#These are the dependency files, which make will clean up after it creates them
DEPFILES:=$(patsubst %.cpp,%.d,$(SOURCES))
#Don't create dependencies when we're cleaning, for instance
ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
#Chances are, these files don't exist. GMake will create them and
#clean up automatically afterwards
-include $(DEPFILES)
endif
#This is the rule for creating the dependency files
src/%.d: src/%.cpp
$(CXX) $(CXXFLAGS) -MM -MT '$(patsubst src/%.cpp,obj/%.o,$<)' $< -MF [email protected]
#This rule does the compilation
obj/%.o: src/%.cpp src/%.d src/%.h
@$(MKDIR) $(dir [email protected])
$(CXX) $(CXXFLAGS) -o [email protected] -c $<
這將完成自動生成已更改的每個文件的依賴關係,並根據任何編譯它們規則,你必須到位。這使我可以將新文件轉儲到src /目錄中,並將它們自動編譯爲依賴項和全部。
6
GNU C預處理器cpp有一個選項-MM,它可以根據包含模式產生一個適合的依賴關係集。
0
Digital Mars C/C++編譯器附帶makedep工具。
17
現在讀了this portion in particular我認爲有一個更容易的解決方案,只要你有一個合理的最新版本的gcc/g ++。如果你只需要添加-MMD
您CFLAGS
,定義一個變量OBJS
代表你的所有目標文件,然後執行:
-include $(OBJS:%.o=%.d)
那麼就應該把你倆一種簡單有效的自動的依賴構建系統。
4
我只需添加這makefile文件和它工作得很好:
-include Makefile.deps
Makefile.deps:
$(CC) $(CFLAGS) -MM *.[ch] > Makefile.deps
相關問題
- 1. Makefile - 依賴關係生成
- 2. 從文件名生成一個生成文件目標依賴關係
- 3. 生成文件和項目目錄結構中的自動依賴關係
- 4. 爲gcc生成依賴關係
- 5. 爲cuda文件生成頭文件依賴關係
- 6. 在pod中生成依賴關係庫
- 7. 關於生成maven依賴關係
- 8. 爲不同的輸出目錄生成gcc依賴關係
- 9. Maven2:如何生成一個包含項目依賴關係名稱的文件?
- 10. WIx刻錄項目依賴關係不生成
- 11. TCL代碼依賴關係生成器
- 12. GCC makefile依賴關係生成路徑
- 13. 如何生成不依賴關係的Crystal可執行文件?
- 14. 如何檢查依賴關係的生成文件?
- 15. 如何自動生成文件之間的依賴關係?
- 16. 如何從一組XSD文件生成依賴關係圖?
- 17. (自動)跨多個生成文件依賴關係
- 18. 生成MATLAB m文件依賴關係樹
- 19. '鋼筋生成'不包括生成版本中的一些依賴關係
- 20. C庫,生成文件頭的依賴
- 21. 如何更改生成的工件的依賴關係?
- 22. 如何僅通過類爲一個項目生成依賴關係圖?
- 23. 爲Delphi生成單元依賴關係的工具
- 24. 如何爲許多依賴關係的AAR生成Xamarin綁定?
- 25. 包括在Android庫生成的POM中的依賴關係
- 26. 在哪裏給bpmn中生成的java類的依賴關係?
- 27. 使用-MMD生成的依賴項文件在刪除後自動生成
- 28. 如何添加依賴關係的Java文件,同時生成與節儉文件Bazel生成
- 29. 我需要幫助修改生成文件中的依賴項
- 30. 如何在Kbuild中添加對生成的源文件的依賴關係?
不要落入這個陷阱,如果你有超過100個文件,因爲它是第一次過慢。在這種情況下,您應該使用一次調用的內容,而不是每個文件一次。 Makedepend可能有這個選項。在工作中,我們使用自定義的perl腳本。 – 2009-03-08 12:57:42
謝謝,我會牢記這一點。我目前的項目有大約十幾個文件,所以沒有大的開銷。此外,最初的構建需要20多分鐘,所以我總是運行它,去喝點咖啡,然後運行增量構建。 – 2009-04-27 11:21:12
謝謝,這真的幫了我。你可以把`$(patsubst src /%,obj /%,$(patsubst%.cpp,%。o,$ <))'寫成`$(patsubst src /%。cpp,obj /%o ,$ <)`。另外,使用選項`-MF $ @`選項而不是使用`> $ @`重定向輸出會更有意義嗎? g ++手冊頁警告你可能在stdout上有一些不需要的調試輸出,但是你不會用`-MF $ @`得到。 – Maarten 2012-04-19 20:26:34