gpt4 book ai didi

c++ - 将 freetype 与 cmake 链接起来

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:25 59 4
gpt4 key购买 nike

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

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

  • freetype-config --libs一样使用实用程序freetype-config
  • 使用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";
}
}

最佳答案

要加载像 FindFreetype.cmake 这样的模块,您需要在 cmake 中通过 find_package 命令使用它。第一个参数是包名。其对应文件名的“查找”由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)

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_include_directories(demo PRIVATE ${FREETYPE_INCLUDE_DIRS})

target_link_libraries 是平台独立的,而 CMAKE_EXE_LINKER_FLAGS 中的 '-lfreetype 不是。

CMakeLists.txt 将在其他可用 freetype 的平台上工作。

(编辑 2019:使用 target_include_directories() 而不是 include_directories()

关于c++ - 将 freetype 与 cmake 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23888274/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com