2015-04-23 33 views
2

我想將cpplint.py(https://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py)添加到基於autotools的項目。有沒有人知道正確的做法?將linting添加到基於autotools的構建系統

+0

翻轉答案將是'dist_noinst_SCRIPTS = cpplint.py',但也許你的意思是如何運行linter作爲'make check'的一部分?目前還不清楚你在問什麼。 – ptomato

+0

理想情況下,作爲make本身的默認目標的一部分。我希望它與編譯器/預處理器在特定源文件上的運行方式類似。 – Anirudh

回答

2

我們假設你想在所有.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

+0

感謝這個非常詳細的答案。我會找出一種方法將其整合到我自己的構建系統中。 – Anirudh