Ponieważ clock_gettime
znajduje się w librt
musimy połączyć się, że kiedy robi czek (inaczej CUpewnij będzie po prostu nie skompilować program testowy to generuje aby sprawdzić, czy funkcja istnieje).
Nie jest to możliwe z CHECK_FUNCTION_EXISTS
. Zamiast tego należy użyć CHECK_LIBRARY_EXISTS:
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
To będzie teraz pracować i wyjście:
-- Looking for clock_gettime in rt - found
Aktualizacja W nowszych glibc 2.17+ clock_gettime
został przeniesiony z librt
do libc
.
więc mieć pewność, aby znaleźć clock_gettime
na wszystkich systemach trzeba by zrobić dwie kontrole:
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()
ta ulegnie zmianie wraz z wydaniem glibc 2.17 . Symbole clock_ * są przenoszone do biblioteki libc, a kod nie będzie już musiał łączyć się z biblioteką. –