我想將cpplint.py(https://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py)添加到基於autotools的項目。有沒有人知道正確的做法?將linting添加到基於autotools的構建系統
回答
我們假設你想在所有.cpp
源文件上運行linter作爲make
的一部分。我們還假定棉絨在你的路上,你不會將它的副本作爲你包裝的一部分進行分發。
所有檢查首先要確保您有可用的棉短絨在configure.ac
:
AC_PATH_PROG([CPPLINT], [cpplint.py], [true])
AS_IF([test "x$CPPLINT" = xtrue],
[AC_MSG_WARN([We recommend cpplint.py for developing this package.
Get it from https://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py
and put it in your path, or point the CPPLINT environment variable at it.])])
爲true
的解釋在這種情況下,並不意味着布爾真值見下文。如果您想讓棉絨絕對必需,請改用AC_MSG_ERROR
。
使其運行的最佳方式是編寫Makefile代碼並將其掛接到Automake的all-local
目標中。如果棉絨不可用,那麼這將很好地稱爲true
命令,它不會做任何事情。
lint: $(myprogram_SOURCES)
-$(CPPLINT) $^
all-local: lint
.PHONY: lint
這是假定被LINTED都存儲在變量myprogram_SOURCES
源文件。根據您的設置,您可能會將它們放在不同的變量中,或者不止一個。
如果您使用的是戳記文件而不是假目標,那麼您甚至可以使用$?
而不是$^
來僅使用更改後的文件。
配方開頭的-
告訴Make忽略來自該規則的錯誤。這非常重要,否則如果你有一次毛病,構建將會失敗!這會非常煩人,因爲有些人喜歡先編寫和測試粗略代碼,然後再進行清理。另一方面,這個解決方案也可以讓人們完全忽略林肯錯誤。
由於這個原因,我建議移動短毛到make check
。這樣,人們可以按照他們想要的方式進行開發,編寫make
,但是您可以要求任何新代碼通過make check
。爲此,請刪除$(CPPLINT)
前面的-
,並將all-local
更改爲check-local
。
感謝這個非常詳細的答案。我會找出一種方法將其整合到我自己的構建系統中。 – Anirudh
- 1. 重構構建系統以使用Autotools
- 2. 構建基於Web的專家系統?
- 3. 如何將Auth0添加到Angular的構建系統中?
- 4. 針對基於Web的遠程構建系統的建議
- 5. 將cppcheck集成到構建系統中
- 6. 如何將類路徑添加到我的Android Ant構建系統?
- 7. 如何在基於Debian的系統中構建RPM軟件包?
- 8. 基於當前系統區域的字符串值構建DateTime
- 9. .sln兼容基於Mono的CLI構建系統?
- 10. 將權限添加到複雜系統
- 11. 將構造函數添加到C#系統類
- 12. 添加到基於Jenkins構建參數的PATH
- 13. 基於XMPP的Chatbot基於UC系統
- 14. 如何構建Office加載項而不將其註冊到構建系統上?
- 15. 添加的Makefile樣條件邏輯Visual Studio的構建系統
- 16. 基於AutoMapper Convention的系統
- 17. 基於知識的系統
- 18. PHP構建系統
- 19. 基於組件的體系結構與分佈式系統
- 20. 如何設置autotools爲多個系統同時構建獨立體系結構的項目?
- 21. 什麼時候從一個in-IDE構建系統轉移到一個基於腳本的構建?
- 22. 將wireshark移植到基於qnx的系統中
- 23. 成功構建後自動將文件系統發佈到文件系統
- 24. 添加到彤彤TextView的android系統
- 25. 將語義UI構建添加到Webpack
- 26. 基於Google Docs的志願者管理系統的結構
- 27. 爲什麼要將基於郵件的服務間通信系統轉換爲基於消息的系統
- 28. GNU構建系統問題
- 29. 構建通知系統
- 30. linux構建系統工具
翻轉答案將是'dist_noinst_SCRIPTS = cpplint.py',但也許你的意思是如何運行linter作爲'make check'的一部分?目前還不清楚你在問什麼。 – ptomato
理想情況下,作爲make本身的默認目標的一部分。我希望它與編譯器/預處理器在特定源文件上的運行方式類似。 – Anirudh