将编译库和包含文件添加到CMake项目?

Mik*_*ike 12 c++ gcc cmake

将预构建的库包含到cmake项目的最佳方法是什么?我想在我正在处理的项目中包含FreeType,文件结构如下:

  • 建立
    • 苹果系统
      • 使/
      • 的XCode /
    • 视窗
      • 视觉工作室/
  • 资源
      • 苹果系统
        • libfreetype建立
      • 视窗
        • freetype.dll
    • 包括
      • freetype /(ftbuild.h自动包含的各种头文件)
      • ftbuild.h(这是我理解的代码中包含的内容.)
    • 我的项目
      • main.cpp中
      • Foo.cpp中
      • foo.h中

该库已经编译完毕.MyProject是当前项目的名称.

谢谢!麦克风

Boo*_*jum 10

最近的版本已经有一个用于查找FreeType的模块.这是我过去做过的事情:

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})
Run Code Online (Sandbox Code Playgroud)

您需要将路径更改为相对于CMakeLists.txt.

此代码段首先调用FindFreetype模块以检入标准系统位置.如果它无法在那里找到库,那么这将回到检查相对于您的CMakeLists.txt脚本的目录.如果仍然失败,你仍然可以设置或覆盖通过通常CMake的UI的位置.无论如何,它会尝试在要链接的包含和库列表中添加一些内容.


DLR*_*ave 9

只需使用target_link_libraries以及预构建的lib的完整路径.

所以,像:

# 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()
Run Code Online (Sandbox Code Playgroud)