mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-19 02:07:49 +08:00
a7bbee3152
* [oniguruma] Fix misusage of vcpkg_check_features * [xsimd] Use vcpkg_check_features
72 lines
2.2 KiB
Markdown
72 lines
2.2 KiB
Markdown
# vcpkg_check_features
|
|
|
|
Check if one or more features are a part of the package installation.
|
|
|
|
## Usage
|
|
```cmake
|
|
vcpkg_check_features(
|
|
<feature1> <output_variable1>
|
|
[<feature2> <output_variable2>]
|
|
...
|
|
)
|
|
```
|
|
|
|
`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(<feature> <output_variable>)
|
|
```
|
|
can be used as a replacement of:
|
|
```cmake
|
|
if(<feature> IN_LIST FEATURES)
|
|
set(<output_variable> ON)
|
|
else()
|
|
set(<output_variable> OFF)
|
|
endif()
|
|
```
|
|
|
|
However, if you have a feature that was checked like this before:
|
|
```cmake
|
|
if(<feature> IN_LIST FEATURES)
|
|
set(<output_variable> OFF)
|
|
else()
|
|
set(<output_variable> 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)
|