C++ 将freetype与cmake链接

C++ 将freetype与cmake链接,c++,cmake,dynamic-linking,freetype,C++,Cmake,Dynamic Linking,Freetype,在使用extern C库构建C++11项目时,我在linux下使用cmake链接freetype2时遇到问题 对于cmake和freetype 2,我基本上有两个选项: 使用实用程序freetype-config就像freetype-config--libs 使用FindFreetype 现在我正在尝试实现第二个选项,我对cmake不是很熟练,也不了解它的逻辑 我的问题是链接阶段,我不知道如何正确地做到这一点,加上这个模块没有像freetype config--libs那样完整,它真正包括了

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

对于cmake和freetype 2,我基本上有两个选项:

  • 使用实用程序
    freetype-config
    就像
    freetype-config--libs
  • 使用
    FindFreetype
现在我正在尝试实现第二个选项,我对
cmake
不是很熟练,也不了解它的逻辑

我的问题是链接阶段,我不知道如何正确地做到这一点,加上这个模块没有像
freetype config--libs
那样完整,它真正包括了我需要的所有库和标志,而不仅仅是文件的路径;因此,我假设我必须对
zlib
libpng
执行相同的操作

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”{
#包括
#包括FT_FREETYPE_H
}
#包括
int main()
{
英国电信大学图书馆;
自动错误=FT_Init_FreeType(&library);
如果(错误)
{

std::cout要加载像
FindFreetype.cmake
这样的模块,您需要在cmake中使用
find_package
-命令。第一个参数是包名。cmake会自动添加相应文件名的“find”

虽然
include
可能与
find_-package
一起使用,但您可以添加一些标志。例如,如下所示,
REQUIRED
,以在找不到freetype时使cmake失败

此外,应使用命令
target\u link\u libraries
完成与cmake的链接

下面是我给您写的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\u link\u库
独立于平台,而
CMAKE\u EXE\u LINKER\u标志
中的
'-lfreetype
则不独立

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


(编辑2019:使用
target\u include\u directories()
而不是
include\u directories()

我需要一个完整的示例,因为这是我第一次使用它。所以使用
include(FindFreetype)
是错误的?我还发现
target\u链接库(demo freetype)
也可以工作,有什么区别吗?所以区别在于,如果
包含
失败,将不会有消息或中断,
包含
是一个真正通用的命令。
查找包
是一个更具体的宏,具有更多的控制和选项。但在这两种情况下,结果都是包含我想?我的意思是,如果你把“控制”和业务逻辑放在一边一分钟,效果是一样的?使用现代CMake(3.0+)的
target\u include\u目录
,以避免污染具有全球标志的其他项目。
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})