检查time.h / sys / time.h兼容性

时间:2015-04-01 23:14:22

标签: c cmake

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

如何使用CMake完成这项工作?

2 个答案:

答案 0 :(得分: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})
多年来,我在测试中遇到了一些令人费解的行为,这些行为是因为一次测试中的剩余物干扰了另一次测试。

答案 1 :(得分:1)

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