【问题标题】:Check for time.h / sys/time.h compatibilty检查 time.h / sys/time.h 的兼容性
【发布时间】:2015-06-06 18:55:13
【问题描述】:

我目前正在将一个 autotools 项目移植到 CMake,它使用 AC_HEADER_TIME autotools 宏来检查我是否可以同时包含 time.hsys/time.h

如何使用 CMake 来完成?

【问题讨论】:

    标签: c cmake


    【解决方案1】:

    您可以将try_compile()#include 两个文件的示例源一起使用并检查结果。

    【讨论】:

    • 您是否偶然知道显示问题的代码 sn-p?
    【解决方案2】:

    这不是专门的时间测试,但有关如何做这类事情的示例,您可以查看 BRL-CAD 中的此示例:

    http://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/trunk/misc/CMake/test_srcs/sys_wait_test.c

    然后使用代码在 CMake 中进行测试:

    CHECK_C_SOURCE_RUNS(${CMAKE_SOURCE_DIR}/misc/CMake/test_srcs/sys_wait_test.c SYS_WAIT_TEST_RUNS)
    

    如果您不想尝试运行代码,也可以使用 CHECK_C_SOURCE_COMPILES(我们通常会这样做,但这种事情取决于具体情况。)请参阅 http://www.cmake.org/cmake/help/v3.0/module/CheckCSourceRuns.htmlhttp://www.cmake.org/cmake/help/v3.0/module/CheckCSourceCompiles.html 了解有关使用变量控制编译完成方式的更多信息。一般来说,如果您需要设置这些变量,您需要在指定测试值之前缓存它们的当前值,然后在测试后恢复原始值,即

    set(CMAKE_REQUIRED_FLAGS_CACHE ${CMAKE_REQUIRED_FLAGS})
    set(CMAKE_REQUIRED_FLAGS "-foo_flag")
    CHECK_C_SOURCE_RUNS(${CMAKE_SOURCE_DIR}/CMake/time_test.c TIME_TEST_RUNS)
    set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_CACHE})
    

    多年来,我在测试中遇到了一些令人费解的行为,这些行为是由于一项测试的剩余部分干扰了另一项测试。

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 1970-01-01
      • 2012-10-01
      • 2015-12-16
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2013-02-12
      相关资源
      最近更新 更多