vcpkg_проверка_features

Проверьте, является ли одна или несколько функций частью установки пакета.

Использование

vcpkg_check_features(
    OUT_FEATURE_OPTIONS <out-var>
    [PREFIX <prefix>]
    [FEATURES
        [<feature-name> <feature-var>]...
        ]
    [INVERTED_FEATURES
        [<feature-name> <feature-var>]...
        ]
)

Значение <out-var> должно быть задано по соглашению FEATURE_OPTIONS .

vcpkg_check_features() Будет:

  • для каждого <feature-name> переданного в FEATURES:
    • Значение ON, если эта функция задана, добавьте -D<feature-var>=ON<out-var>и установите <prefix>_<feature-var> значение ON.
    • Если функция не задана, добавьте -D<feature-var>=OFF<out-var>и установите значение <prefix>_<feature-var> OFF.
  • для каждого <feature-name> переданного в INVERTED_FEATURES:
    • Значение OFF, если эта функция задана, добавьте -D<feature-var>=OFF<out-var>и установите значение <prefix>_<feature-var> OFF.
    • Если функция не задана, добавьте -D<feature-var>=ON<out-var>и установите <prefix>_<feature-var> значение ON.

Если <prefix> параметр не передается, набор vars функций просто <feature-var>не _<feature-var>передается.

Если INVERTED_FEATURES не передается, FEATURES ключевое слово является необязательным. Такое поведение является устаревшим.

Если одно и то же <feature-var> значение передается несколько раз, то vcpkg_check_features это приведет к неустранимой ошибке, так как это ошибка.

Примеры

Пример 1. Обычные функции

$ ./vcpkg install mimalloc[asm,secure]

# ports/mimalloc/portfile.cmake
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
    FEATURES
        asm       MI_SEE_ASM
        override  MI_OVERRIDE
        secure    MI_SECURE
)

vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
    OPTIONS
        # Expands to "-DMI_SEE_ASM=ON;-DMI_OVERRIDE=OFF;-DMI_SECURE=ON"
        ${FEATURE_OPTIONS}
)

Пример 2. Инвертированные функции

$ ./vcpkg install cpprestsdk[websockets]

# ports/cpprestsdk/portfile.cmake
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
    INVERTED_FEATURES
        brotli      CPPREST_EXCLUDE_BROTLI
        websockets  CPPREST_EXCLUDE_WEBSOCKETS
)

vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
    OPTIONS
        # Expands to "-DCPPREST_EXCLUDE_BROTLI=ON;-DCPPREST_EXCLUDE_WEBSOCKETS=OFF"
        ${FEATURE_OPTIONS}
)

Пример 3. Настройка нескольких параметров для одной функции

$ ./vcpkg install pcl[cuda]

# ports/pcl/portfile.cmake
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
    FEATURES
        cuda  WITH_CUDA
        cuda  BUILD_CUDA
        cuda  BUILD_GPU
)

vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
    OPTIONS
        # Expands to "-DWITH_CUDA=ON;-DBUILD_CUDA=ON;-DBUILD_GPU=ON"
        ${FEATURE_OPTIONS}
)

Пример 4. Использование обычных и инвертированных функций

$ ./vcpkg install rocksdb[tbb]

# ports/rocksdb/portfile.cmake
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
    FEATURES
        tbb   WITH_TBB
    INVERTED_FEATURES
        tbb   ROCKSDB_IGNORE_PACKAGE_TBB
)

vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
    OPTIONS
        # Expands to "-DWITH_TBB=ON;-DROCKSDB_IGNORE_PACKAGE_TBB=OFF"
        ${FEATURE_OPTIONS}
)

Примеры в портфайлах

Оригинал

scripts/cmake/vcpkg_проверка_features.cmake