Trước tiên, hãy chỉnh sửa CMakeLists.txt của bạn để bao gồm thư viện của bên thứ ba. Bạn sẽ cần hai điều: đường dẫn đến tệp tiêu đề và tệp thư viện để liên kết tới. Ví dụ:
# searching for include directory
find_path(SIFTGPU_INCLUDE_DIR siftgpu.h)
# searching for library file
find_library(SIFTGPU_LIBRARY siftgpu)
if (SIFTGPU_INCLUDE_DIR AND SIFTGPU_LIBRARY)
# you may need that if further action in your CMakeLists.txt depends
# on detecting your library
set(SIFTGPU_FOUND TRUE)
# you may need that if you want to conditionally compile some parts
# of your code depending on library availability
add_definitions(-DHAVE_LIBSIFTGPU=1)
# those two, you really need
include_directories(${SIFTGPU_INCLUDE_DIR})
set(YOUR_LIBRARIES ${YOUR_LIBRARIES} ${SIFTGPU_LIBRARY})
endif()
Tiếp theo, bạn có thể làm tương tự cho các thư viện khác và khi mỗi thư viện được phát hiện, liên kết đến các mục tiêu:
target_link_libraries(yourtarget ${YOUR_LIBRARIES})
Sau đó, bạn có thể cấu hình dự án của bạn với CMake, nhưng như nó không có bất kỳ cách kỳ diệu để tìm thư viện cài đặt của bạn, nó sẽ không tìm thấy bất cứ điều gì, nhưng nó sẽ tạo ra hai biến bộ nhớ cache: SIFTGPU_INCLUDE_DIR
và SIFTGPU_LIBRARY
.
Sử dụng giao diện đồ họa CMake để có SIFTGPU_INCLUDE_DIR
trỏ đến thư mục chứa tệp tiêu đề và SIFTGPU_LIBRARY
vào tệp .lib
của thư viện bên thứ ba của bạn.
Lặp lại cho mọi thư viện của bên thứ ba, định cấu hình lại và biên dịch.
Làm thế nào để thông báo cho cmake biết tệp .dll nằm ở đâu? Tôi chỉ thấy liên kết tĩnh đến một thư viện lib và cung cấp một gợi ý cho vị trí tệp tiêu đề. – EbbnFlow
Cmake không cần biết tệp dll ở đâu. Những tập tin này chỉ cần thiết khi chạy nhị phân không khi biên dịch nó. – Guillaume