【发布时间】:2015-06-06 18:55:13
【问题描述】:
我目前正在将一个 autotools 项目移植到 CMake,它使用 AC_HEADER_TIME autotools 宏来检查我是否可以同时包含 time.h 和 sys/time.h。
如何使用 CMake 来完成?
【问题讨论】:
我目前正在将一个 autotools 项目移植到 CMake,它使用 AC_HEADER_TIME autotools 宏来检查我是否可以同时包含 time.h 和 sys/time.h。
如何使用 CMake 来完成?
【问题讨论】:
您可以将try_compile() 与#include 两个文件的示例源一起使用并检查结果。
【讨论】:
这不是专门的时间测试,但有关如何做这类事情的示例,您可以查看 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.html 和 http://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})
多年来,我在测试中遇到了一些令人费解的行为,这些行为是由于一项测试的剩余部分干扰了另一项测试。
【讨论】: