假设您要在所有 .cpp 源文件上运行 linter,作为 make 的一部分。我们还假设 linter 在您的路径中,并且您没有将它的副本作为包的一部分分发。
首先检查以确保您在configure.ac 中有可用的 linter:
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 的解释,在这种情况下,它并不意味着布尔真值。如果您想让 linter 成为绝对要求,请改用 AC_MSG_ERROR。
使其运行的最佳方法是编写 Makefile 代码并将其挂接到 Automake 的 all-local 目标中。如果 linter 不可用,那么这将很好地调用 true 命令,它什么都不做。
lint: $(myprogram_SOURCES)
-$(CPPLINT) $^
all-local: lint
.PHONY: lint
这假设您要检查的源文件都存储在变量myprogram_SOURCES 中。根据您的设置,您可能会将它们放在不同的变量中,或者不止一个。
如果您使用标记文件而不是虚假目标,您甚至可以使用$? 而不是$^,让它仅对更改的文件进行 lint。
配方开头的- 告诉Make 忽略该规则中的错误。这很重要,否则如果你有一个 linting 错误,构建就会失败!这会很烦人,因为有些人喜欢先编写和测试粗略的代码,然后再清理它。另一方面,这种解决方案还可以让人们完全忽略掉毛错误。
因此,我建议将 linting 移至 make check。这样,人们可以按照他们想要的方式进行开发,使用make 进行编译,但您可以要求任何新代码通过make check。为此,请删除$(CPPLINT) 前面的- 并将all-local 更改为check-local。