在使用freetype 2
库构建C++11项目时,在linux下使用cmake
链接extern C
遇到了困难。
对于cmake和freetype 2,我基本上有两个选项:
freetype-config
,如freetype-config --libs
FindFreetype
cmake模块现在我正在尝试实现第二个选项,我对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" {
#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";
}
}
发布于 2014-05-27 03:44:50
要加载像FindFreetype.cmake
这样的模块,需要在cmake中与find_package
-command一起使用它。第一个参数是包名。其相应文件名的“查找”由cmake自动添加。
虽然include
可能与find_package
一起工作,但您可以添加一些标志。例如,如下面所示的REQUIRED
,使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
是独立于平台的,而'-lfreetype
在CMAKE_EXE_LINKER_FLAGS
中则不是。
CMakeLists.txt将在其他自由类型可用的平台上工作。
(编辑2019年:使用target_include_directories()
而不是include_directories()
https://stackoverflow.com/questions/23888274
复制相似问题