我目前正在向CMake移植一个autotools项目,该项目使用AC_HEADER_TIME
autotools宏来检查我是否可以同时包含time.h
和sys/time.h
。
如何使用CMake完成这项工作?
答案 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.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})
多年来,我在测试中遇到了一些令人费解的行为,这些行为是因为一次测试中的剩余物干扰了另一次测试。
答案 1 :(得分:1)
您可以将try_compile()与#include
两个文件的示例源一起使用,并检查结果。