Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像在自动工具中一样检查CMake中的头文件和库函数?_C_Cmake_Autotools - Fatal编程技术网

如何像在自动工具中一样检查CMake中的头文件和库函数?

如何像在自动工具中一样检查CMake中的头文件和库函数?,c,cmake,autotools,C,Cmake,Autotools,我目前正在将一个小型C项目从转换为 在旧的configure中。在中,我使用以下行检查每个标头和库函数是否存在: # Checks for header files AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h]) # Checks for library functions AC_FUNC_FORK AC_CHECK_FUNCS([tim

我目前正在将一个小型C项目从转换为

在旧的
configure中。在
中,我使用以下行检查每个标头和库函数是否存在:

# Checks for header files
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h])

# Checks for library functions
AC_FUNC_FORK
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal])
AC_FUNC_STRFTIME
许多autotools项目都是这样做的

尽管编译器已经检查了必要的头文件,链接器也检查了库函数,但我的代码仍然需要在配置阶段完成这些检查,以便正确设置
#ifdef HAVE_FOOBAR
等的编译标志


在这种情况下,使用CMake检查头/函数的最佳实践是什么

您可以轻松地直接使用、、等进行移植。另请参阅以获取一些建议


以这种方式进行配置增加了可移植性(即您可以检查
ucontext.h
setjmp.h
,并使用当前的配置,使用
#ifdef HAVE_ucontext
#ifdef HAVE_setjmp
修改代码)

此外,当您分发应用程序时,您希望避免(针对用户)出现编译错误,因此使用良好的构建系统,您可以在分发应用程序之前处理大多数架构差异

对于非程序员来说,更容易理解的是,如果“检查gtk+头-失败”,他们必须安装gtk,而不是有大量的编译错误行,这些错误行都说了同样的话,但对大多数人来说是不可读的:)