我想使用CMake来检查我的C编译器是否支持:
__hidden
或其等效内容,例如__attribute__ ((visibility ("hidden")))
restrict
或其等价物这可能吗?如果是这样,怎么样?
答案 0 :(得分:3)
您可以尝试使用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
关键字,可用性可以通过CMAKE_C_COMPILE_FEATURES
变量中c_restrict
的存在来确定:
if (c_restrict IN_LIST CMAKE_C_COMPILE_FEATURES)
[...]
endif()