当前位置:  开发笔记 > 程序员 > 正文

如何在CMake中检查头文件和库函数,就像在Autotools中一样?

如何解决《如何在CMake中检查头文件和库函数,就像在Autotools中一样?》经验,为你挑选了1个好方法。

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

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

# 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项目做AFAIK的事情.

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

在这种情况下,使用CMake检查标头/功能的最佳做法是什么?



1> claf..:

您可以轻松地将直接与CHECK_FUNCTION_EXISTS,CHECK_INCLUDE_FILE,CHECK_TYPE_SIZE等.另见CMake_HowToDoPlatformChecks一些建议.


在这种风格的配置增加了便携性(即你可以检查ucontext.hsetjmp.h,并使用一个当前,随着修改代码#ifdef HAVE_UCONTEXT#ifdef HAVE_SETJMP).

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

非程序员更容易理解,如果"检查gtk +头 - 失败",他们必须安装gtk,而不是有一大堆编译错误行说同样的事情,但大多数人都无法读取:)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有