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

时间:2010-04-08 16:45:34

标签: c++ gcc cmake

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

  
      
  • 生成      
        
    • 的MacOS      
          
      • 请/
      •   
      • 的XCode /
      •   
    •   
    • 视窗      
          
      • VisualStudio /
      •   
    •   
  •   
  • 来源      
        
    • 库      
          
      • 的MacOS      
            
        • libfreetype建立
        •   
      •   
      • 视窗      
            
        • freetype.dll
        •   
      •   
    •   
    • 包括      
          
      • freetype /(ftbuild.h自动包含的各种头文件)
      •   
      • ftbuild.h(这是我理解的代码中包含的内容。)
      •   
    •   
    • MyProject的      
          
      • 的main.cpp
      •   
      • Foo.cpp中
      •   
      • foo.h中
      •   
    •   
  •   

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

谢谢! 麦克

2 个答案:

答案 0 :(得分: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})

您需要更改相对于CMakeLists.txt的路径。

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

答案 1 :(得分: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()