Я работаю над реализацией статического анализатора кода для нашей базы кода Linux env, и я не сталкиваюсь с проблемой NO FILES EMITTED.
Вот шаги, которые я выполнил:
У меня версия Linux Coverity 2023.9.2. Мы используем cmake для сборки наших проектов, используя «Ninja» в качестве системы сборки. Я настроил Coverity с различными шаблонами в файле «myConfig.xml», чтобы не пропустить ни одного компилятора. Мой проект находится на C++ и C#.
Below is the command how I configure our cmake project before cov-build capture.
*az73@lin*:**/usr/bin/cmake -G "Ninja" -DCMAKE_BUILD_TYPE:STRING = "Debug" -DCMAKE_INSTALL_PREFIX:PATH = "/mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Readers/out/install/WSL-GCC-Debug" -DCMAKE_TOOLCHAIN_FILE = "/mnt/d/microservices/repos/vcpkg/scripts/buildsystems/vcpkg.cmake" /mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Readers/CMakeLists.txt**
Это команда cov-build, которую я даю при создании настроенного проекта cmake. (Вы можете видеть, что сборка идет без каких-либо проблем)
*az73@lin*:**/mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Readers/build/WSL-GCC-Debug$ cov-build --dir cov-int --config /mnt/d/linux-coverity/cov-analysis-linux64-2023.9.2/bin/myConfig.xml /usr/bin/cmake --build /mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Readers/build/WSL-GCC-Debug --clean-first --config Debug**
Coverity Build Capture (64-bit) version 2023.9.2 on Linux 5.15.153.1-microsoft-standard-WSL2 x86_64
Internal version numbers: 395a026bc9 p-2023.9-push-64
[1/1] Cleaning all built files...
Cleaning... 199 files.
[58/202] Linking CXX shared library OutputHelper/ClipperTableAccessor/libClipperTableAccessor.so
MSBuild version 17.7.6+77d58ec69 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
Logging -> /mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Logging/bin/Debug/net6.0/Logging.dll
Utilities -> /mnt/d/microservices/InteropServices/src/Services/Utilities/bin/Debug/net6.0/Utilities.dll
ClipperTableAccessor -> /mnt/d/microservices/InteropServices/src/Services/Modules/HxGN.PPM.Interop.Readers/build/WSL-GCC-Debug/OutputHelper/ClipperTableAccessor/net6.0/ClipperTableAccessor.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:42.74
[94/202] Building CXX object Readers/NavisworksReader/NavisworksFileReader/CMakeFiles/NavisworksFileReader.dir/NavisworksFileReader.cpp.o
И ошибка, с которой я столкнулся, заключается в следующем:
**[WARNING] No files were emitted. This may be due to a problem with your configuration
or because no files were actually compiled by your build command.
Please make sure you have configured the compilers actually used in the compilation.**
Когда я попытался получить образец файла cpp, в котором есть две проблемы, я увидел, что Coverity может его захватить:
*az73@lin*:**/mnt/c/Users/ashaik2/Desktop$ cov-build --dir cov-int-samp --config /mnt/d/linux-coverity/cov-analysis-linux64-2023.9.2/bin/myConfig.xml g++ sample.cpp -o sample**
Coverity Build Capture (64-bit) version 2023.9.2 on Linux 5.15.153.1-microsoft-standard-WSL2 x86_64
Internal version numbers: 395a026bc9 p-2023.9-push-64
Emitted 1 C/C++ compilation units (100%) successfully
1 C/C++ compilation units (100%) are ready for analysis
Я не уверен, почему Coverity не может отправлять какие-либо файлы, когда я пытаюсь на уровне проекта. Я хотел бы знать, не упускаю ли я что-нибудь.
что написал Алан, и если это так, вы можете проверить compile_commands.json
, чтобы увидеть, как компилятор запускается для каждого файла? Я думаю, там должен быть указан cov-build вместо mscc или того, что использует vcpkg. И вы настраиваете его в каталоге чистой сборки? Чтобы исключить любые проблемы с кэшем cmake, вы можете добавить --fresh
к шагу настройки cmake при подготовке рецептов сборки ниндзя.
cov-build
создает файл build-log.txt
в промежуточном каталоге. Вы бы добавили этот файл или репрезентативный отрывок? В частности, вверху должна быть конфигурация компилятора и строки EXECUTING
, соответствующие вызовам компилятора во время сборки.
Возможно, вы также захотите запустить настройку cmake под cov-build
?
@ Ped7g Ped7g Я даже пробовал настроить в каталоге чистой сборки, а также пробовал с помощью --fresh
opt, но бесполезно. переходя к compile_commands.json
, вот как выглядит пример команды: "command": "/usr/bin/cc -I/mnt/d/microservices/repos/vcpkg/buildtrees/libzip/src/a009075b9a-41a56dd033.clean/lib -I/mnt/d/microservices/repos/vcpkg/buildtrees/libzip/x64-linux-dbg -isy
. Я настроил компилятор cc и попробовал, но все равно бесполезно. @ScottMcPeak, да, в промежуточном каталоге есть build-log.txt, но я не считаю его полезным.
Я прошу вас включить в свой вопрос части файла журнала, особенно конфигурации компилятора и строки EXECUTING
. Если я увижу файл журнала, я смогу посоветовать, что, скорее всего, не так.
Я понимаю, спасибо @ScottMcPeak. Я просмотрел журнал сборки и узнал, что фактическая команда во время сборки — c++ -options file.cpp
. Думаю, c++ — это псевдоним g++ в Linux env. Cov-configure с C++ решил мою проблему, и я вижу, что cov-build генерирует файлы для их анализа. Спасибо всем в теме :)
Я просмотрел журнал сборки и узнал, что фактическая команда во время сборки — c++ -options file.cpp
. Думаю, c++ — это псевдоним g++ в Linux env. Cov-configure с C++ решил мою проблему, и я вижу, что cov-build генерирует файлы для их анализа.
Я предполагаю, что ваша цепочка инструментов vcpkg отменяет настройку компилятора, установленную Coverity.