【问题标题】:How to check header files and library functions in CMake like it is done in Autotools?如何像在 Autotools 中一样检查 CMake 中的头文件和库函数?
【发布时间】:2009-03-15 14:24:45
【问题描述】:

我目前正在将一个小型 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

这是许多自动工具项目所做的 AFAIK。

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

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

【问题讨论】:

    标签: c cmake autotools


    【解决方案1】:

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


    以这种方式配置增加了可移植性(即,您可以检查 ucontext.hsetjmp.h 并使用当前的一个,使用 #ifdef HAVE_UCONTEXT#ifdef HAVE_SETJMP 修改您的代码)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 2018-05-11
      • 2017-07-20
      • 2011-08-25
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多