将freetype与cmake链接

use*_*710 5 c++ cmake freetype dynamic-linking

freetype 2在使用库cmake构建C++ 11项目时,我在linux下使用链接时遇到了麻烦extern C.

使用cmake和freetype 2我基本上有2个选项:

  • 使用该工具freetype-configfreetype-config --libs
  • 使用FindFreetype cmake模块

现在我正在尝试实现第二个选项,我不是很熟练,cmake也不了解它的逻辑.

我的问题是链接阶段,我不知道如何正确地做到这一点加上这个模块并不完整,其结果freetype-config --libs实际上包括我需要的所有库和标志,而不仅仅是文件的路径; 所以我假设我要为做同样的zliblibpng.

CMakeLists.txt

cmake_minimum_required (VERSION 2.6)
project (FreetypeTutorials1)

include(FindFreetype)
include_directories(${FREETYPE_INCLUDE_DIRS})

SET(CMAKE_CXX_FLAGS "-O2 -std=c++11")

SET(CMAKE_EXE_LINKER_FLAGS "-v -lfreetype")

add_executable( demo "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp")
Run Code Online (Sandbox Code Playgroud)

./src/main.cpp (只是一些随机代码,所以我有东西可以提供给编译器)

extern "C" {
#include <ft2build.h>
#include FT_FREETYPE_H
}
#include <iostream>
int main()
{
  FT_Library library;
  auto error = FT_Init_FreeType(&library);
  if (error)
  {
    std::cout << "An error !\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

Pat*_* B. 10

要加载模块,FindFreetype.cmake您需要在cmake中使用find_package-command.第一个参数是包名称.其相应文件名的"查找"由cmake自动添加.

虽然include可以与find_package你合作,但可以添加一些标志.例如,如下所示,REQUIRED在未找到freetype时使cmake失败.

另外,应该使用命令完成与cmake的链接target_link_libraries.

这就是我写你CMakeLists.txt的方式:

cmake_minimum_required (VERSION 2.6)
project (FreetypeTutorials1)

find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})

SET(CMAKE_CXX_FLAGS "-O2 -std=c++11")

SET(CMAKE_EXE_LINKER_FLAGS "-v")

add_executable( demo src/main.cpp) # CMAKE_CURRENT_SOURCE_DIR is implicit here
target_link_libraries(demo ${FREETYPE_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

target_link_libraries是独立于平台,而'-lfreetypeCMAKE_EXE_LINKER_FLAGS是没有的.

CMakeLists.txt可以在其​​他freetype可用的平台上运行.

  • 将 `target_include_directories` 与现代 CMake (3.0+) 结合使用,以避免全局标志污染其他项目。 (2认同)