2019-06-29 01:17:39 +08:00
# vcpkg_check_features
2021-03-01 05:17:19 +08:00
2021-03-11 01:56:07 +08:00
The latest version of this document lives in the [vcpkg repo ](https://github.com/Microsoft/vcpkg/blob/master/docs/maintainers/vcpkg_check_features.md ).
2019-08-14 11:13:55 +08:00
Check if one or more features are a part of a package installation.
2019-06-29 01:17:39 +08:00
```cmake
vcpkg_check_features(
2021-03-01 05:17:19 +08:00
OUT_FEATURE_OPTIONS < out-var >
[PREFIX < prefix > ]
[FEATURES
[< feature-name > < feature-var > ]...
]
[INVERTED_FEATURES
[< feature-name > < feature-var > ]...
]
2019-06-29 01:17:39 +08:00
)
```
2021-03-01 05:17:19 +08:00
The `<out-var>` should be set to `FEATURE_OPTIONS` by convention.
2019-06-29 01:17:39 +08:00
2021-03-01 05:17:19 +08:00
`vcpkg_check_features()` will:
2019-08-14 11:13:55 +08:00
2021-03-01 05:17:19 +08:00
- for each `<feature-name>` passed in `FEATURES` :
- if the feature is set, add `-D<feature-var>=ON` to `<out-var>` ,
and set `<prefix>_<feature-var>` to ON.
- if the feature is not set, add `-D<feature-var>=OFF` to `<out-var>` ,
and set `<prefix>_<feature-var>` to OFF.
- for each `<feature-name>` passed in `INVERTED_FEATURES` :
- if the feature is set, add `-D<feature-var>=OFF` to `<out-var>` ,
and set `<prefix>_<feature-var>` to OFF.
- if the feature is not set, add `-D<feature-var>=ON` to `<out-var>` ,
and set `<prefix>_<feature-var>` to ON.
2019-08-14 11:13:55 +08:00
2021-03-01 05:17:19 +08:00
If `<prefix>` is not passed, then the feature vars set are simply `<feature-var>` ,
not `_<feature-var>` .
2019-08-14 11:13:55 +08:00
2021-03-01 05:17:19 +08:00
If `INVERTED_FEATURES` is not passed, then the `FEATURES` keyword is optional.
This behavior is deprecated.
2019-08-14 11:13:55 +08:00
2021-03-01 05:17:19 +08:00
If the same `<feature-var>` is passed multiple times,
then `vcpkg_check_features` will cause a fatal error,
since that is a bug.
2019-08-14 11:13:55 +08:00
## Examples
### Example 1: Regular features
2019-06-29 23:29:13 +08:00
```cmake
2019-08-14 11:13:55 +08:00
$ ./vcpkg install mimalloc[asm,secure]
# ports/mimalloc/portfile.cmake
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
2021-03-01 05:17:19 +08:00
FEATURES
asm MI_SEE_ASM
override MI_OVERRIDE
secure MI_SECURE
2019-08-14 11:13:55 +08:00
)
2022-02-18 09:08:33 +08:00
vcpkg_cmake_configure(
2022-11-02 04:59:01 +08:00
SOURCE_PATH "${SOURCE_PATH}"
2021-03-01 05:17:19 +08:00
OPTIONS
# Expands to "-DMI_SEE_ASM=ON;-DMI_OVERRIDE=OFF;-DMI_SECURE=ON"
${FEATURE_OPTIONS}
2019-08-14 11:13:55 +08:00
)
2019-06-29 23:29:13 +08:00
```
2019-08-14 11:13:55 +08:00
### Example 2: Inverted features
2019-06-29 23:29:13 +08:00
```cmake
2019-08-14 11:13:55 +08:00
$ ./vcpkg install cpprestsdk[websockets]
# ports/cpprestsdk/portfile.cmake
2022-11-02 04:59:01 +08:00
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
2021-03-01 05:17:19 +08:00
INVERTED_FEATURES
brotli CPPREST_EXCLUDE_BROTLI
websockets CPPREST_EXCLUDE_WEBSOCKETS
2019-08-14 11:13:55 +08:00
)
2022-02-18 09:08:33 +08:00
vcpkg_cmake_configure(
2022-11-02 04:59:01 +08:00
SOURCE_PATH "${SOURCE_PATH}"
2021-03-01 05:17:19 +08:00
OPTIONS
# Expands to "-DCPPREST_EXCLUDE_BROTLI=ON;-DCPPREST_EXCLUDE_WEBSOCKETS=OFF"
${FEATURE_OPTIONS}
2019-08-14 11:13:55 +08:00
)
2019-06-29 23:29:13 +08:00
```
2019-08-14 11:13:55 +08:00
### Example 3: Set multiple options for same feature
2019-06-29 23:29:13 +08:00
```cmake
2019-08-14 11:13:55 +08:00
$ ./vcpkg install pcl[cuda]
# ports/pcl/portfile.cmake
2022-11-02 04:59:01 +08:00
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
2021-03-01 05:17:19 +08:00
FEATURES
cuda WITH_CUDA
cuda BUILD_CUDA
cuda BUILD_GPU
2019-08-14 11:13:55 +08:00
)
2022-02-18 09:08:33 +08:00
vcpkg_cmake_configure(
2022-11-02 04:59:01 +08:00
SOURCE_PATH "${SOURCE_PATH}"
2021-03-01 05:17:19 +08:00
OPTIONS
# Expands to "-DWITH_CUDA=ON;-DBUILD_CUDA=ON;-DBUILD_GPU=ON"
${FEATURE_OPTIONS}
2019-08-14 11:13:55 +08:00
)
2021-01-17 11:26:38 +08:00
```
2019-08-14 11:13:55 +08:00
### Example 4: Use regular and inverted features
2019-06-29 23:29:13 +08:00
```cmake
2019-08-14 11:13:55 +08:00
$ ./vcpkg install rocksdb[tbb]
2019-06-29 23:29:13 +08:00
2019-08-14 11:13:55 +08:00
# ports/rocksdb/portfile.cmake
2022-11-02 04:59:01 +08:00
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
2021-03-01 05:17:19 +08:00
FEATURES
tbb WITH_TBB
INVERTED_FEATURES
tbb ROCKSDB_IGNORE_PACKAGE_TBB
2019-08-14 11:13:55 +08:00
)
2019-06-29 01:17:39 +08:00
2022-02-18 09:08:33 +08:00
vcpkg_cmake_configure(
2022-11-02 04:59:01 +08:00
SOURCE_PATH "${SOURCE_PATH}"
2021-03-01 05:17:19 +08:00
OPTIONS
# Expands to "-DWITH_TBB=ON;-DROCKSDB_IGNORE_PACKAGE_TBB=OFF"
${FEATURE_OPTIONS}
2019-08-14 11:13:55 +08:00
)
2021-01-17 11:26:38 +08:00
```
2019-08-14 11:13:55 +08:00
## Examples in portfiles
* [cpprestsdk ](https://github.com/microsoft/vcpkg/blob/master/ports/cpprestsdk/portfile.cmake )
* [pcl ](https://github.com/microsoft/vcpkg/blob/master/ports/pcl/portfile.cmake )
* [rocksdb ](https://github.com/microsoft/vcpkg/blob/master/ports/rocksdb/portfile.cmake )
2019-06-29 01:17:39 +08:00
## Source
2021-03-01 05:17:19 +08:00
[scripts/cmake/vcpkg\_check\_features.cmake ](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_check_features.cmake )