ืกืงื™ืจื” ืขืฆืžืื™ืช ืฉืœ PVS-Studio (Linux, C++)

ืจืื™ืชื™ ืคืจืกื•ื ืฉ-PVS ืœืžื“ื” ืœื ืชื— ืชื—ืช ืœื™ื ื•ืงืก, ื•ื”ื—ืœื˜ืชื™ ืœื ืกื•ืช ืื•ืชื• ื‘ืคืจื•ื™ืงื˜ื™ื ืฉืœื™. ื•ื–ื” ืžื” ืฉื™ืฆื ืžื–ื”.


ืชื•ื›ืŸ

  1. Pros
  2. ื—ืกืจื•ื ื•ืช
  3. ืชื•ืฆืื•ืช ืฉืœ
  4. ืื—ืจื™ืช ื“ื‘ืจ

Pros

ืชืžื™ื›ื” ืžื’ื™ื‘ื”

ื‘ื™ืงืฉืชื™ ืžืคืชื— ื ื™ืกื™ื•ืŸ ื•ื”ื ืฉืœื—ื• ืœื™ ืื•ืชื• ื‘ืื•ืชื• ื”ื™ื•ื.

ืชื™ืขื•ื“ ื“ื™ ื‘ืจื•ืจ

ื”ืฆืœื—ื ื• ืœื”ืคืขื™ืœ ืืช ื”ื ืชื— ืœืœื ื‘ืขื™ื•ืช. ืขื–ืจื” ืขื‘ื•ืจ ืคืงื•ื“ื•ืช ืžืกื•ืฃ ื–ืžื™ื ื” ื’ื ื›ืŸ (ืœืžืจื•ืช ืฉื™ืฉ ื›ืืŸ ื›ืžื” ืชืœื•ื ื•ืช, ืจืื” ืกืขื™ืฃ ื—ืกืจื•ื ื•ืช).

ืืคืฉืจื•ืช ืœื ื™ืชื•ื— ืจื‘ ื—ื•ื˜ื™ื

ืœื ืชื— ื™ืฉ ืืคืฉืจื•ืช "ืกื˜ื ื“ืจื˜ื™ืช". -j, ื”ืžืืคืฉืจ ืœื‘ืฆืข ื ื™ืชื•ื— ื‘ืžืงื‘ื™ืœ ื‘ืžืกืคืจ ืžืฉื™ืžื•ืช. ื–ื” ื—ื•ืกืš ื”ืจื‘ื” ื–ืžืŸ.

ื”ื“ืžื™ื” ื˜ื•ื‘ื”

ืคื•ืจืžื˜ื™ ืคืœื˜ ืจื‘ื™ื ื•ืฉื•ื ื™ื, ืžื˜ืงืกื˜ ื•ืขื“ ืœื•ืข ืจืฉืช ืงื˜ืŸ. ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ื ื•ื—, ืชืžืฆื™ืชื™, ืขื ืจืžื–ื™ื ืœืฆื“ ืฉื•ืจื•ืช ื‘ืงื•ื“ ื•ืงื™ืฉื•ืจื™ื ืœืชื™ืื•ืจื™ ืื‘ื—ื•ืŸ.

ืฉื™ืœื•ื‘ ืงืœ ื‘ื”ืจื›ื‘ื”

ื›ืœ ื”ืชื™ืขื•ื“ ื ืžืฆื ื‘ืืชืจ ืฉืœื”ื, ืื ื™ ื™ื›ื•ืœ ืจืง ืœื•ืžืจ ืฉืื ื”ืคืจื•ื™ืงื˜ ืฉืœื›ื ื‘ื ื•ื™ ื‘ืืžืฆืขื•ืช CMake, ืื– ื”ื›ืœ ืžืื•ื“ ืคืฉื•ื˜.

ืชื™ืื•ืจื™ ืื‘ื—ื•ืŸ ื˜ื•ื‘ื™ื

ืื ืืชื” ืžื™ื™ืฆืจ ืคืœื˜ ื‘ืžืฆื‘ fullhtml, ืื– ืœื›ืœ ื”ื•ื“ืขื” ื™ืฉ ืงื™ืฉื•ืจ ืœืชื™ืื•ืจ ืื‘ื—ื•ืŸ, ืขื ื”ืกื‘ืจื™ื, ื“ื•ื’ืžืื•ืช ืงื•ื“ ื•ืงื™ืฉื•ืจื™ื ื ื•ืกืคื™ื.

ื—ืกืจื•ื ื•ืช

ื‘ื•ืจื•ืช ืฉืœ ืฉืคืช C++ ืขืœ ื™ื“ื™ ื”ืžื ืชื—

ืœืจื•ืข ื”ืžื–ืœ, PVS ืœืคืขืžื™ื ืขื•ืฉื” ืฉื’ื™ืื•ืช ืชื—ื‘ื™ืจ ื•ืžื™ื™ืฆืจ ื”ื•ื“ืขื•ืช ื—ื™ื•ื‘ื™ื•ืช ืฉื’ื•ื™ื•ืช ื›ืืฉืจ ื”ืงื•ื“ ื ื›ื•ืŸ ืœื—ืœื•ื˜ื™ืŸ.

ืœืžืฉืœ, ื™ืฉ ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

ื›ืŸ, ืžื™ืœืช ืžืคืชื— auto ื™ื›ื•ืœ ืœื”ืชื›ื•ื•ืŸ void, ื‘ืฉื‘ื™ืœ ื–ื” ื–ื” ื ื•ืขื“ ื”ืžื›ื•ื ื™ืช. ืื‘ืœ PVS ื”ื•ืฆื™ื ืืช ื”ื”ื•ื“ืขื•ืช ื”ื‘ืื•ืช:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

ืืชืจ ืื™ื˜ื™ ืžืื•ื“

ื›ืŸ, ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ืฉืœื™ื“ ื›ืœ ื”ื•ื“ืขื” ื™ืฉ ืงื™ืฉื•ืจ ืœืชื™ืื•ืจ ื”ืื‘ื—ื•ืŸ ื”ืžืชืื™ื ืขื ื“ื•ื’ืžืื•ืช. ืื‘ืœ ื›ืฉืืชื” ืœื•ื—ืฅ ืขืœ ืงื™ืฉื•ืจ, ืืชื” ืฆืจื™ืš ืœื—ื›ื•ืช ื“ื™ ื”ืจื‘ื” ื–ืžืŸ, ื•ืœืคืขืžื™ื ื–ื” ืงื•ืจื” 504 Gateway ืคืกืง ื–ืžืŸ.

ืฉืคื”

ื›ืœ ื”ืชื™ืื•ืจื™ื ื”ื ื‘ืจื•ืกื™ืช, ื•ื–ื” ื ื”ื“ืจ. ืื‘ืœ ืงื™ืฉื•ืจื™ื ืžื”ื“ื•ื— ืชืžื™ื“ ืžื•ื‘ื™ืœื™ื ืœื’ืจืกื” ื”ืื ื’ืœื™ืช. ื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ื—ืœื™ืฃ ืืช ื”ืฉืคื” ื›ื“ื™ ืฉืชื•ื›ืœ ืœื”ืฆื™ื’ ืื‘ื—ื•ืŸ ืžื™ื“ ื‘ืจื•ืกื™ืช. ืœื ืžืฆืืชื™ ืืคืฉืจื•ืช ื›ื–ื• ื‘ืžืžืฉืง.

ื–ื” ืœื ื ื•ื— ืœืขื‘ื•ื“ ืขื ืจืžื•ืช ืื‘ื—ื•ืŸ ื“ืจืš ื”ืงื•ื ืกื•ืœื”

ื ืชื—ื™ืœ ืขื ื”ืขื•ื‘ื“ื” ืฉืฉืชื™ ื”ืคืงื•ื“ื•ืช ืฉื‘ื”ืŸ ื ืขืฉื” ืฉื™ืžื•ืฉ (ื–ื” pvs-studio-analyzer ะธ plog-converter) ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื ืœืฆื™ื•ืŸ ืื‘ื—ื•ืŸ.

ืœืขื–ื•ืจ ืœ pvs-studio-analyzer ืงื•ืจื:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

ื‘ื™ืœื™ืชื™ ื”ืจื‘ื” ื–ืžืŸ ื‘ื ื™ืกื™ื•ืŸ ืœื”ื‘ื™ืŸ ืœืืŸ ืœืœื›ืช ื”ื•ืกืฃ ("ื”ื•ืกืคืช ื”ืขืจื›ื™ื"). ื ื™ืกื™ืชื™ ืœืจืฉื•ื ืื•ืชื ืžื•ืคืจื“ื™ื ื‘ืคืกื™ืงื™ื:

pvs-studio-analyzer analyze ... -a 1,4,16

ื ื™ืกื™ืชื™ ืœืจืฉื•ื ืืช ื”ืžืคืชื— ืžืกืคืจ ืคืขืžื™ื:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

ื•ืจืง ืื– ื”ื‘ื ืชื™ ืฉืืœื• ืžืกื›ื•ืช ืงืฆืช! ื•ืืชื” ืฆืจื™ืš ืœืกื™ื›ื•ืื•ืœื ื”ื•ืกืฃ ืžืฉืžืขื•ื™ื•ืช. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœืงื‘ืœ ืื‘ื—ื•ืŸ ื›ืœืœื™, ืื‘ื—ื•ืŸ ืขื‘ื•ืจ ืžื™ืงืจื•-ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื•-MISRA, ืขืœื™ืš ืœืกื›ื ืื•ืชื (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

ืฉื™ืžื•ืฉ ื‘ืžืกื›ื•ืช ืกื™ื‘ื™ื•ืช ื‘ืžืžืฉืงื™ ืžืฉืชืžืฉ ื”ื•ื ื‘ื“ืจืš ื›ืœืœ ืฆื•ืจื” ื’ืจื•ืขื”. ื ื™ืชืŸ ื”ื™ื” ืœืกื›ื ืืช ื›ืœ ื–ื” ื‘ืื•ืคืŸ ืคื ื™ืžื™, ื•ืœื”ื’ื“ื™ืจ ืงื‘ื•ืฆื” ืฉืœ ื“ื’ืœื™ื ืขื‘ื•ืจ ื”ืžืฉืชืžืฉ.

ื‘ื ื•ืกืฃ, ื™ืฉ ื’ื ืฉื™ืจื•ืช plog-converter, ืืฉืจ ืžื™ื™ืฆืจ ืžื™ื“ืข ื ื™ืชื•ื— ืกื˜ื˜ื™ ืงืจื™ื ืื ื•ืฉื™. ื™ืฉ ืœื” ื‘ืขื™ื•ืช ืื—ืจื•ืช.

ืขื–ืจื” ืœืชื•ื›ื ื™ืช plog-converter ื“ื™ื•ื•ื—ื™ื:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

ื”ื•ืคื™ืขื• ื›ืืŸ ื›ืžื” "ืจืžื•ืช" ืฉืœื ื”ื™ื• ืฉื ืงื•ื“ื, ื•ื’ื ืœื ืžืฆืืชื™ ืขืœื™ื”ืŸ ืฉื•ื ื“ื‘ืจ ื‘ืชื™ืขื•ื“.

ื‘ืื•ืคืŸ ื›ืœืœื™, ื–ื” ืœื ื‘ืจื•ืจ. ืœื›ืŸ ื”ืฆื‘ืชื™ ื”ื›ืœ ืœืžืงืกื™ืžื•ื.

ื—ื‘ื•ืจื” ืฉืœ ืงืœืœื•ืช ืžื˜ื•ืคืฉื•ืช ืขืœ Catch

ืฉื ื™ื™ื ืžืชื•ืš ืฉืœื•ืฉืช ื”ืคืจื•ื™ืงื˜ื™ื ืฉื ื™ืชื—ืชื™ ืžืฉืชืžืฉื™ื ื‘ืกืคืจื™ื™ืช ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื” Catch2. ื•ืœื—ืœืง ื”ืืจื™ ืฉืœ ื”ื•ื“ืขื•ืช (!!! 90 ืžืชื•ืš 138 ื‘ืื—ืช ื•-297 ืžืชื•ืš 344 ื‘ืฉื ื™ื™ื”!!!) ื™ืฉ ืืช ื”ื˜ื•ืคืก ื”ื‘ื:

ืกืงื™ืจื” ืขืฆืžืื™ืช ืฉืœ PVS-Studio (Linux, C++)

ืœื ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืจื™ื‘ื•ื™ ืคืชื™ืœื™ื

ื™ืฉ ื”ืจื‘ื” ืชื•ืฆืื•ืช ื—ื™ื•ื‘ื™ื•ืช ืฉื’ื•ื™ื•ืช ืœื’ื‘ื™ ืžืฉืชื ื™ื ื›ื‘ื™ื›ื•ืœ ื‘ืœืชื™ ืžืฉืชื ื™ื ืื• ืœื•ืœืื•ืช ืื™ื ืกื•ืคื™ื•ืช, ื‘ืขื•ื“ ืฉืขื‘ื•ื“ื” ืขื ืžืฉืชื ื™ื ืืœื• ืžืชืจื—ืฉืช ืžืฉืจืฉื•ืจื™ื ืฉื•ื ื™ื, ื•ืื ื–ื” ืœื ื”ื™ื” ื›ืš, ืื– ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื” ืœื ื”ื™ื• ืขื•ื‘ื“ื•ืช.

ืกืงื™ืจื” ืขืฆืžืื™ืช ืฉืœ PVS-Studio (Linux, C++)

ืขื ื–ืืช, ื”ืื ืžื ืชื— ืกื˜ื˜ื™ ื™ื›ื•ืœ ื‘ื›ืœืœ ืœืงื—ืช ื–ืืช ื‘ื—ืฉื‘ื•ืŸ? ืœื ื™ื•ื“ืข.

ืชื•ืฆืื•ืช ืฉืœ

PVS ืœื ืžืฆื ื‘ืื’ื™ื ืืžื™ืชื™ื™ื ื‘ืคืจื•ื™ืงื˜ื™ ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืœื™ ื”ืชืคืจืฆื•ืช ะธ ืคืจื•ืงืกื™ืžื”, ื•ื›ืŸ ื‘ื˜ื™ื•ื˜ืช ืขื‘ื•ื“ื”, ืฉืžืกื™ื‘ื•ืช ื‘ืจื•ืจื•ืช ืื™ื ื™ ื™ื›ื•ืœ ืœื”ืฆื™ื’ื”. ื ื›ื•ืŸ, ื›ื“ืื™ ืœื–ื›ื•ืจ ืฉื›ืžื” ื—ืกืจื•ื ื•ืช ื›ื‘ืจ ื ืชืคืกื• ื•ืชื•ืงื ื• ืงื•ื“ื ืœื›ืŸ ื‘ืืžืฆืขื•ืช Cppcheck ะธ scan-build.

ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ืจื•ืฉื ืžื›ืœ ื”ื ื™ืชื•ื—ื™ื ื”ืœืœื• ื”ื•ื ื‘ืขืจืš ืื•ืชื• ื”ื“ื‘ืจ: ื›ืŸ, ื”ื ืชื•ืคืกื™ื ืžืฉื”ื•, ืœืคืขืžื™ื ืืคื™ืœื• ืžืฉื”ื• ื—ืฉื•ื‘, ืื‘ืœ ื‘ืกืš ื”ื›ืœ ื”ืžื”ื“ืจ ืžืกืคื™ืง.

ื–ื” ืืคืฉืจื™ (ื•ืื ื™ ืื™ืฉื™ืช ืื•ื”ื‘ ืœื—ืฉื•ื‘ ื›ืš) ืฉื”ืฆื•ื•ืช ืฉืœื ื• ืžืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ืคื™ืชื•ื— ืชื•ื›ื ื” ืฉืžืืคืฉืจื•ืช ืœื ื• ืœื™ื™ืฆืจ ื›ืžื•ืช ืžื™ื ื™ืžืœื™ืช ืฉืœ ืงื•ื“ ืžื—ื•ืจื‘ืŸ. ืขื“ื™ืฃ ืœื ืœื™ืฆื•ืจ ื‘ืขื™ื•ืช ืžืืฉืจ ืœื”ืชื’ื‘ืจ ืขืœื™ื”ืŸ ื‘ื’ื‘ื•ืจื”.

ืœื›ืŸ, ืื ื™ ืœื•ืงื— ืืช ื”ื—ื•ืคืฉื™ ืœืชืช ื›ืžื” ืขืฆื•ืช ืื™ืš ืœื›ืชื•ื‘ ื‘-C++ ื‘ืฆื•ืจื” ื›ื–ื• ืฉืœื ืœื™ืจื•ืช ืœืืฃ ืื—ื“ ืืช ื”ืจื’ืœื™ื™ื ืื• ืœื”ื›ื•ืช ืžื™ืฉื”ื• ื‘ืžืฆื— ื‘ืžื’ืจืคื”.

ื”ืคืง ืืช ื”ืžืจื‘ ืžืื‘ื—ื•ืŸ ืžื”ื“ืจ

ื”ืฆื•ื•ืช ืฉืœื ื• ืžืฉืชืžืฉ (ื•ืžื™ืขืฅ ืœืš) ื‘ืืคืฉืจื•ื™ื•ืช ื”ืงื•ืžืคื™ืœืฆื™ื” ื”ื‘ืื•ืช:

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

ืืคืฉืจ ืื•ืชื ื‘ืคืจื•ื™ืงื˜ ืฉืœืš ื•ืœืžื“ ื”ืจื‘ื” ืขืœ ื”ืงื•ื“ ืฉืœืš.

ื”ื™ืฆืžื“ ืœืชืงืŸ

ื ืกื” ืœื ืœื”ืฉืชืžืฉ ื‘ื“ื‘ืจื™ื ืชืœื•ื™ื™ ืคืœื˜ืคื•ืจืžื” ืื ื™ืฉ ืื ืœื•ื’ื™ื ืกื˜ื ื“ืจื˜ื™ื™ื, ื•ืื ืืชื” ืžืžืฉ ืœื ื™ื›ื•ืœ ื‘ืœืขื“ื™ื”ื, ืขื˜ื•ืฃ ืื•ืชื ื‘ื‘ืœื•ืงื™ื ืžื™ื•ื—ื“ื™ื ืขื‘ื•ืจ ืคืงื•ื“ื•ืช ืžืืงืจื• (ืื• ืžืฉื”ื• ืื—ืจ) ื•ืคืฉื•ื˜ ืืœ ืชื™ืชืŸ ืœืงื•ื“ ืฉืœืš ืœื”ื™ื•ืช ืงื•ืžืคื™ืœืฆื™ื” ื‘ืชื ืื™ื ืœื ื ืชืžื›ื™ื.

ื”ื™ืฆืžื“ ืœืกืžื ื˜ื™ืงื” ืฉืœ ืคืขื•ืœื” ืจื’ื™ืœื”

ื”ื•ืกืคื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื—ื™ื‘ื•ืจ, ื”ื›ืคืœ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื›ืคืœ, ืงืจื™ืืช ื”ืคื•ื ืงืฆื™ื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืงืจื™ืืช ืคื•ื ืงืฆื™ื”, ื”ืขืชืงื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื”ืขืชืงื”, carry ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช carry, ืžื™ื›ืœ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืื™ื˜ืจืฆื™ื”, ืื™ื˜ืจื˜ื•ืจ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืงื™ื“ื•ื ++ ื•ื”ืชื™ื™ื—ืกื•ืช *. ื•ื›ืŸ ื”ืœืื” ื•ื›ืŸ ื”ืœืื”.

ืื ื™ ื—ื•ืฉื‘ ืฉื”ืจืขื™ื•ืŸ ื‘ืจื•ืจ. ื™ืฉื ืŸ ืžื•ืกื›ืžื•ืช ืžื‘ื•ืกืกื•ืช ืฉืื™ื ืŸ ืžื—ื™ื™ื‘ื•ืช, ืืš ื›ืœ ื”ืžืฉืชืžืฉื™ื ื•ื”ืงื•ืจืื™ื ืฉืœ ื”ืงื•ื“ ืฉืœืš ืžืฆืคื™ื ืœืจืื•ืช. ืืœ ืชื ืกื” ืœื”ืขืจื™ื ืขืœ ืื—ืจื™ื, ืื—ืจืช ืชืขืจื™ื ืขืœ ืขืฆืžืš.

ื›ืชื•ื‘ ืงื•ื“ ืชื•ืื

ืงื•ื“ื ื›ืœ, ืื ื™ ืžืชื›ื•ื•ืŸ ืœืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช. ืจืฆื•ื™ ืžืื•ื“ ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืžืžืฉืงื™ ื”ืžื—ืœืงื•ืช ื•ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœืš ืขื ืกืคืจื™ื•ืช ืกื˜ื ื“ืจื˜ื™ื•ืช ื•ืื—ืจื•ืช (ืœื“ื•ื’ืžื”, Boost).

ืืœ ืชื”ืกืก ืœื”ืกืชื›ืœ ืขืœ ืžืžืฉืงื™ STL ื•-Boost. ืœืžืขื˜ ื—ืจื™ื’ื™ื ื ื“ื™ืจื™ื, ืชืจืื” ืฉื ืžื•ื“ืœ ืœื—ื™ืงื•ื™ ืจืื•ื™.

ื”ืคืง ืืช ื”ืžืจื‘ ืžื›ืœื™ ืงื•ื“ ืคืชื•ื—

ืขื‘ื•ืจ ืื•ืชื• ื ื™ืชื•ื— ืกื˜ื˜ื™, ื™ืฉื ื ืœืคื—ื•ืช ืฉื ื™ ื›ืœื™ื ืคืชื•ื—ื™ื ื‘ื—ื™ื ื ืฉื ื™ืชืŸ ืœื—ื‘ืจ ืจืง ืคืขื ืื—ืช ืœื›ืœ ืคืจื•ื™ืงื˜ ืขื ืžืขืจื›ืช ื”ื‘ื ื™ื™ื” CMake.

ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ื›ืš ื‘ืคืจืกื•ื ื”ืื—ืจื•ืŸ ืฉืœื™.

ืื—ืจื™ืช ื“ื‘ืจ

ืœื‘ืกื•ืฃ, ื‘ืจืฆื•ื ื™ ืœื”ื“ื’ื™ืฉ ืฉืื ื™ ืœื ืชื•ืžืš ืฉืœื ืœื”ืฉืชืžืฉ ื‘-PVS ืื• ื‘ื›ืœ ืžื ืชื— ืกื˜ื˜ื™ ืื—ืจ. ืื‘ืœ ืื ื™ ืžืžืœื™ืฅ ืœืš ืœื—ืฉื•ื‘ ืื™ืš ืงืจื” ืฉื”ื ืชื— ื”ืกื˜ื˜ื™ ืžื•ืฆื ื›ืœ ื”ื–ืžืŸ ืฉื’ื™ืื•ืช ืžืฉืžืขื•ืชื™ื•ืช ื‘ืงื•ื“ ืฉืœืš.

ื–ื• ืจืง ืชื•ืฆืื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื—ืคืฉ ื•ืœื—ืกืœ ืืช ื”ืกื™ื‘ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”