Вы можете проверить различные функции, попытавшись скомпилировать их с помощью check_c_source_compiles
и сохранить результат в переменной make. Например, вы будете использовать эти тесты в CMakeLists.txt для проверки доступности restrict
и __hidden
:
check_c_source_compiles(
"
int f(void *restrict x);
int main(void) {return 0;}
"
HAVE_RESTRICT
)
check_c_source_compiles(
"
typedef struct s *t;
int f(t __restrict x);
int main(void) {return 0;}
"
HAVE___RESTRICT
)
check_c_source_compiles(
"
__hidden int f() {return 1;}
int main(void) {return 0;}
"
HAVE___HIDDEN
)
check_c_source_compiles(
"
#include <stdlib.h>
static void f(void) __attribute__ ((visibility(\"hidden\")));
int main(void) {return 0;}
"
HAVE___ATTRIBUTE__VISIBILITY_HIDDEN
)
Здесь есть несколько примеров: https://github.com/Kitware/CMake/blob/master/Utilities/cmliblzma/CMakeLists.txt
В частности, для ключевого слова restrict
доступность можно определить по наличию c_restrict
в переменной CMAKE_C_COMPILE_FEATURES
:
if (c_restrict IN_LIST CMAKE_C_COMPILE_FEATURES)
[...]
endif()