将freetype与cmake链接

时间:2014-05-27 11:30:35

标签: c++ cmake dynamic-linking freetype

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

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

  • 使用freetype-config
  • 等实用程序freetype-config --libs
  • 使用FindFreetype cmake module

现在我正在尝试实施第二个选项,而且我对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")

./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";
  }
}

1 个答案:

答案 0 :(得分:10)

要加载像FindFreetype.cmake这样的模块,您需要在find_package - 命令的cmake中使用它。第一个参数是包名称。 &#34;发现&#34;它的相应文件名由cmake自动添加。

虽然include可能与find_package一起使用,但您可以添加一些标记。例如,如下所示,REQUIRED,在找不到自由类型时使cmake失败。

此外,使用命令target_link_libraries进行与cmake的链接。

我就是这样写你的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})

target_link_libraries与平台无关,而'-lfreetype中的CMAKE_EXE_LINKER_FLAGS则不是。

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