为什么CHECK_FUNCTION_EXISTS在CMake中找不到clock_gettime?

时间:2012-12-06 15:57:44

标签: c cmake

CHECK_FUNCTION_EXISTS怎么找不到clock_gettime

我在CMakeLists.txt中使用以下代码:

include(CheckFunctionExists)

set(CMAKE_EXTRA_INCLUDE_FILES time.h)
CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)

这是在我知道的clock_gettime POSIX系统上。但我只是得到:

-- Looking for clock_gettime - not found

1 个答案:

答案 0 :(得分:9)

因为在clock_gettime中找到librt,我们需要在进行检查时链接到CHECK_FUNCTION_EXISTS(否则CMake将无法编译它生成的测试程序以测试函数是否存在)。

include(CheckLibraryExists) CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) 无法做到这一点。而必须使用 CHECK_LIBRARY_EXISTS

-- Looking for clock_gettime in rt - found

现在可以正常工作并输出:

clock_gettime

更新:在较新的glibc 2.17 + librt已从libc移至clock_gettime

因此,为了确保在所有系统上找到include(CheckLibraryExists) CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" 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() ,您需要进行两次检查:

{{1}}