如何像在自动工具中一样检查CMake中的头文件和库函数?
我目前正在将一个小型C项目从转换为 在旧的如何像在自动工具中一样检查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
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,而不是有大量的编译错误行,这些错误行都说了同样的话,但对大多数人来说是不可读的:)