将预构建的库包含到cmake项目的最佳方法是什么?我想将FreeType包含在我正在处理的项目中,文件结构如下:
- 生成
- 的MacOS
- 请/
- 的XCode /
- 视窗
- VisualStudio /
- 来源
- 库
- 的MacOS
- libfreetype建立
- 视窗
- freetype.dll
- 包括
- freetype /(ftbuild.h自动包含的各种头文件)
- ftbuild.h(这是我理解的代码中包含的内容。)
- MyProject的
- 的main.cpp
- Foo.cpp中
- foo.h中
该库已经编译完毕。 MyProject是当前项目的名称。
谢谢! 麦克
答案 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()