Vì clock_gettime
được tìm thấy trong librt
chúng ta cần phải liên kết đến đó khi thực hiện việc kiểm tra (nếu không CMake sẽ chỉ đơn giản là không biên dịch các chương trình thử nghiệm nó tạo ra để kiểm tra xem chức năng tồn tại).
Điều này là không thể với CHECK_FUNCTION_EXISTS
. Thay vào đó CHECK_LIBRARY_EXISTS phải được sử dụng:
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
này bây giờ sẽ làm việc và đầu ra:
-- Looking for clock_gettime in rt - found
Cập nhật: Trong glibc mới hơn 2.17+ clock_gettime
đã được chuyển từ librt
để libc
.
Vì vậy, để chắc chắn để tìm clock_gettime
trên tất cả các hệ thống, bạn sẽ cần phải làm hai kiểm tra:
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()
này sẽ thay đổi với việc phát hành glibc 2.17 . Các ký hiệu clock_ * đang được chuyển vào libc và mã sẽ không còn cần liên kết với librt nữa. –