因为我们需要在进行检查clock_gettime
时librt
链接到它(否则 CMake 将无法编译它生成的测试程序以测试该函数是否存在)。
这是不可能的CHECK_FUNCTION_EXISTS
。相反,必须使用CHECK_LIBRARY_EXISTS :
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_CLOCK_GETTIME)
这现在可以工作并输出:
-- Looking for clock_gettime in rt - found
更新:在较新的 glibc 2.17+中clock_gettime
已从.librt
libc
因此,要确保clock_gettime
在所有系统上找到,您需要进行两项检查:
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_CLOCK_GETTIME)
if (NOT HAVE_CLOCK_GETTIME)
set(CMAKE_EXTRA_INCLUDE_FILES time.h)
CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
SET(CMAKE_EXTRA_INCLUDE_FILES)
endif()