Сообщение PVS-studio и собственный генератор makefile'ов от 02.12.2016 15:28
Изменено 02.12.2016 15:33 D_Tony
Привет!
кто использует это чудо — могут посоветовать КАК можно вписать в самосгенерированный мейк,
в котором создается вот такая простыня:
вместо логичных правил на каждую единицу трансляции раздельно.
куда и как надо втыкать ТО, о чем идет речь в статье
"Использование режима независимого запуска анализатора на примере Makefile проекта"
кто использует это чудо — могут посоветовать КАК можно вписать в самосгенерированный мейк,
в котором создается вот такая простыня:
####### Implicit rules
.SUFFIXES: .c .cpp .cc .cxx
{..\..\obj\base\debug\vs}.cpp{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.cc{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.cxx{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.c{..\..\obj\base\debug\vs\}.obj::
$(CC) -c $(CFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
вместо логичных правил на каждую единицу трансляции раздельно.
куда и как надо втыкать ТО, о чем идет речь в статье
"Использование режима независимого запуска анализатора на примере Makefile проекта"
особенно вставляет, что в примере существует явный перевод строкиВозьмём для примера Makefile проект, в котором сборка осуществляется компилятором Visual C++, и она описана в makefile проекта следующим правилом:
$(CC) $(CFLAGS) $<
Здесь $(CC) вызывает cl.exe, которому передаются параметры компиляции $(CFLAGS), и наконец с помощью макроса $< осуществляется подстановка всех С\С++ файлов,
от которых зависит текущая цель сборки. Т.о. для всех файлов с исходным кодом будет вызван компилятор cl.exe с необходимыми параметрами.
Модифицируем данный сценарий таким образом, чтобы перед вызовом компилятора для каждого файла осуществлялась проверка статическим анализатором PVS-Studio:
$(PVS) --source-file $< --cl-params $(CFLAGS) $< --cfg "C:\CPP\PVS-Studio.cfg" $(CC) $(CFLAGS) $<
и зачем он?$<
--cfg
Привет!
кто использует это чудо — могут посоветовать КАК можно вписать в самосгенерированный мейк,
в котором создается вот такая простыня:
вместо логичных правил на каждую единицу трансляции раздельно, вызов pvs-studio.exe.
куда и как надо втыкать ТО, о чем идет речь в статье
"Использование режима независимого запуска анализатора на примере Makefile проекта"
особенно вставляет, что в примере существует явный перевод строки:
кто использует это чудо — могут посоветовать КАК можно вписать в самосгенерированный мейк,
в котором создается вот такая простыня:
####### Implicit rules
.SUFFIXES: .c .cpp .cc .cxx
{..\..\obj\base\debug\vs}.cpp{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.cc{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.cxx{..\..\obj\base\debug\vs\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
{..\..\obj\base\debug\vs}.c{..\..\obj\base\debug\vs\}.obj::
$(CC) -c $(CFLAGS) $(INCPATH) -Fo..\..\obj\base\debug\vs\ @<<
$<
<<
вместо логичных правил на каждую единицу трансляции раздельно, вызов pvs-studio.exe.
куда и как надо втыкать ТО, о чем идет речь в статье
"Использование режима независимого запуска анализатора на примере Makefile проекта"
Возьмём для примера Makefile проект, в котором сборка осуществляется компилятором Visual C++, и она описана в makefile проекта следующим правилом:
$(CC) $(CFLAGS) $<
Здесь $(CC) вызывает cl.exe, которому передаются параметры компиляции $(CFLAGS), и наконец с помощью макроса $< осуществляется подстановка всех С\С++ файлов,
от которых зависит текущая цель сборки. Т.о. для всех файлов с исходным кодом будет вызван компилятор cl.exe с необходимыми параметрами.
Модифицируем данный сценарий таким образом, чтобы перед вызовом компилятора для каждого файла осуществлялась проверка статическим анализатором PVS-Studio:
$(PVS) --source-file $< --cl-params $(CFLAGS) $< --cfg "C:\CPP\PVS-Studio.cfg" $(CC) $(CFLAGS) $<
особенно вставляет, что в примере существует явный перевод строки:
и зачем он?$<
--cfg