2010-04-08 70 views
10

将预建库包含到cmake项目中的最佳方法是什么?我想包括的FreeType到我工作的项目和文件结构是这样的:将编译的库和包含文件添加到CMake项目中?

  • 构建
    • 的MacOS
      • 制作/
      • 的XCode/
    • Windows
      • 的VisualStudio/
      • 的MacOS
        • libfreetype建立
      • 视窗
        • freetype.dll
    • 包括
      • freetype的/(各种标题由ftbuild.h自动包括文件)
      • ftbuild.h(这是包括在我的理解代码中。)
    • MyProject的
      • 的main.cpp
      • Foo.cpp中
      • foo.h中

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

谢谢! Mike

回答

9

最近的版本已经有了一个用于查找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设置或覆盖位置。无论如何,它都会尝试添加一些东西到链接的包含和库列表中。

6

只需使用target_link_libraries和预编译库的完整路径即可。

所以,像这样:

# 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() 
相关问题