2015-04-23 3 views
2

Я хочу добавить cpplint.py (https://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py) в проект на основе autotools. Кто-нибудь знает правильный способ сделать это?Добавление перемычки к системе построения на основе autotools

+0

Ответ на flip будет 'dist_noinst_SCRIPTS = cpplint.py', но, возможно, вы имеете в виду, как запустить linter как часть' make check'? Непонятно, о чем вы спрашиваете. – ptomato

+0

Идеально как часть цели по умолчанию для себя. Я хотел бы, чтобы он был похож на то, как компилятор/препроцессор работает в определенном исходном файле. – Anirudh

ответ

2

Предположим, вы хотите запустить linter на всех исходных файлах .cpp как часть make. Давайте также предположим, что linter находится на вашем пути, и вы не распространяете его копию как часть вашего пакета.

Прежде всего, проверьте, чтобы убедиться, что у вас есть линт доступен в 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, которые в данном случае не означают истинное значение Boolean. Если вы хотите сделать linter абсолютным требованием, вместо этого используйте AC_MSG_ERROR.

Лучший способ сделать это - написать код Makefile и вставить его в цель Automake all-local. Если linter недоступен, тогда это красиво вызовет команду 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