2010-04-08 32 views
10

Phương pháp tốt nhất để bao gồm thư viện dựng sẵn cho dự án cmake là gì? Tôi muốn đưa FreeType vào dự án tôi đang làm việc trên và cấu trúc tập tin là như thế này:Thêm thư viện đã biên dịch và bao gồm các tệp vào Dự án CMake?

  • Build
    • MacOS
      • Hãy/
      • XCode/
    • Windows
      • VisualStudio/
  • Nguồn
    • libs
      • MacOS
        • libfreetype
      • của Windows
        • freetype.dll
    • bao gồm
      • freetype/(tập tin tiêu đề khác nhau được bao gồm tự động bởi ftbuild.h)
      • ftbuild.h (đây là những gì được bao gồm trong mã từ sự hiểu biết của tôi.)
    • MyProject
      • main.cpp
      • Foo.cpp
      • foo.h

Thư viện đã được biên soạn. MyProject là tên của dự án hiện tại.

Cảm ơn! Mike

Trả lời

9

Các phiên bản gần đây đã có mô-đun để tìm FreeType. Đây là loại điều tôi đã thực hiện trong quá khứ:

INCLUDE(FindFreetype) 
IF(NOT FREETYPE_FOUND) 
    FIND_LIBRARY(FREETYPE_LIBRARIES NAMES libfreetype freetype.dll PATHS "./libs/MacOS" "./libs/Windows" DOC "Freetype library") 
    FIND_PATH(FREETYPE_INCLUDE_DIRS ftbuild.h "./includes" DOC "Freetype includes") 
ENDIF(NOT FREETYPE_FOUND) 
INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) 
TARGET_LINK_LIBRARIES(MyProject ${FREETYPE_LIBRARIES}) 

Bạn cần phải thay đổi đường dẫn tương ứng với CMakeLists.txt của mình.

Đoạn mã này trước tiên gọi mô-đun FindFreetype để kiểm tra các vị trí hệ thống tiêu chuẩn.Nếu nó không tìm thấy thư viện ở đó, thì điều này sẽ quay lại kiểm tra các thư mục liên quan đến tập lệnh CMakeLists.txt của bạn. Nếu rằng vẫn không thành công, bạn vẫn có thể đặt hoặc ghi đè các vị trí thông qua giao diện người dùng CMake thông thường. Trong mọi trường hợp, nó sẽ cố thêm một thứ gì đó vào danh sách các thư viện và thư viện để liên kết.

6

Chỉ cần sử dụng target_link_libraries với đường dẫn đầy đủ đến lib dựng sẵn.

Vì vậy, một cái gì đó như:

# In the file Source/MyProject/CMakeLists.txt 
add_executable(my_exe main.cpp foo.cpp foo.h) 
if(WIN32) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/Windows/freetype.lib) 
endif() 
if(APPLE) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/MacOS/libfreetype.a) 
endif() 
Các vấn đề liên quan