Compartilhar via


vcpkg_check_features

Verifique se um ou mais recursos fazem parte de uma instalação de pacote.

Uso

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

O <out-var> deve ser definido FEATURE_OPTIONS por convenção.

vcpkg_check_features() vontade:

  • para cada <feature-name> passagem em FEATURES:
    • se o recurso estiver definido, adicione -D<feature-var>=ON a <out-var>e defina <prefix>_<feature-var> como ATIVADO.
    • se o recurso não estiver definido, adicione -D<feature-var>=OFF a <out-var>e defina <prefix>_<feature-var> como OFF.
  • para cada <feature-name> passagem em INVERTED_FEATURES:
    • se o recurso estiver definido, adicione -D<feature-var>=OFF a <out-var>e defina <prefix>_<feature-var> como OFF.
    • se o recurso não estiver definido, adicione -D<feature-var>=ON a <out-var>e defina <prefix>_<feature-var> como ON.

Se <prefix> não for aprovado, então o conjunto de vars de recursos são simplesmente <feature-var>, não _<feature-var>.

Se INVERTED_FEATURES não for aprovada, a FEATURES palavra-chave será opcional. Este comportamento é preterido.

Se o mesmo <feature-var> for passado várias vezes, então vcpkg_check_features causará um erro fatal, já que isso é um bug.

Exemplos

Exemplo 1: Recursos regulares

$ ./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}
)

Exemplo 2: Recursos invertidos

$ ./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}
)

Exemplo 3: Definir várias opções para o mesmo recurso

$ ./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}
)

Exemplo 4: Usar recursos regulares e invertidos

$ ./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}
)

Exemplos em portfiles

Origem

scripts/cmake/vcpkg_check_features.cmake