# vcpkg_check_features Check if one or more features are a part of the package installation. ## Usage ```cmake vcpkg_check_features( [ ] ... ) ``` `vcpkg_check_features` accepts a list of (feature, output_variable) pairs. If a feature is specified, the corresponding output variable will be set as `ON`, or `OFF` otherwise. The syntax is similar to the `PROPERTIES` argument of `set_target_properties`. `vcpkg_check_features` will create a variable `FEATURE_OPTIONS` in the parent scope, which you can pass as a part of `OPTIONS` argument when calling functions like `vcpkg_config_cmake`: ```cmake vcpkg_config_cmake( SOURCE_PATH ${SOURCE_PATH} PREFER_NINJA OPTIONS -DBUILD_TESTING=ON ${FEATURE_OPTIONS} ) ``` ## Notes ```cmake vcpkg_check_features( ) ``` can be used as a replacement of: ```cmake if( IN_LIST FEATURES) set( ON) else() set( OFF) endif() ``` However, if you have a feature that was checked like this before: ```cmake if( IN_LIST FEATURES) set( OFF) else() set( ON) endif() ``` then you should not use `vcpkg_check_features` instead. [```oniguruma```](https://github.com/microsoft/vcpkg/blob/master/ports/oniguruma/portfile.cmake), for example, has a feature named `non-posix` which is checked with: ```cmake if("non-posix" IN_LIST FEATURES) set(ENABLE_POSIX_API OFF) else() set(ENABLE_POSIX_API ON) endif() ``` and by replacing these code with: ```cmake vcpkg_check_features(non-posix ENABLE_POSIX_API) ``` is totally wrong. `vcpkg_check_features` is supposed to be called only once. Otherwise, the `FEATURE_OPTIONS` variable set by a previous call will be overwritten. ## Examples * [czmq](https://github.com/microsoft/vcpkg/blob/master/ports/czmq/portfile.cmake) * [xsimd](https://github.com/microsoft/vcpkg/blob/master/ports/xsimd/portfile.cmake) * [xtensor](https://github.com/microsoft/vcpkg/blob/master/ports/xtensor/portfile.cmake) ## Source [scripts/cmake/vcpkg_check_features.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_check_features.cmake)