首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从2.4.8和2.5.2版本中找到freetype2库

从2.4.8和2.5.2版本中找到freetype2库
EN

Stack Overflow用户
提问于 2015-07-09 20:17:08
回答 1查看 362关注 0票数 0

我有一个依赖于Freeetype6dev软件包的程序。在安装此软件包时,在Ubuntu14.04 vs 12.02上安装时会得到不同的版本。在执行freetype-config --ftversion时,您将分别得到2.5.2和2.4.8。我遇到的问题是,当我试图使用cmake找到这些库时。使用2.4.8,它会找到ft2build.h,然后进入<freetype/config/ftheader.h>来查找标头的其余部分。在2.5.2中,它进入了<config/ftheader.h>。我不会在cmake中使用内置的FindFreeType,因为有些构建已经包含了ft2build.h,我希望它使用目录中的一个,而不是系统。以下是我的自定义FindFreeTypeTwo.cmake的样子。

代码语言:javascript
运行
复制
  1 # - Try to find Freetype2                                                                                               
  2 # Once done this will define                                                                                            
  3 #                                                                                                                       
  4 #  FREETYPE2_FOUND       - system has FREETYPE2                                                                         
  5 #  FREETYPE2_INCLUDE_DIR - the Freetype2 include directory                                                              
  6 #  FREETYPE2_LIBRARIES   - Link these to use Freetype2                                                                  
  7                                                                                                                         
  8 #handle the QUIETLY and REQUIRED arguments and set FREETYPE2_FOUND to TRUE if                                           
  9 #all listed variables are TRUE                                                                                          
 10 FIND_PATH(_FREETYPE2_INCLUDE_DIR ft2build.h PATH_SUFFIXES freetype2)                                                    
 11                                                                                                                         
 12 FIND_LIBRARY(_FREETYPE2_LIBRARIES NAMES freetype)                                                                       
 13                                                                                                                         
 14 INCLUDE(FindPackageHandleStandardArgs)                                                                                  
 15 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype2 DEFAULT_MSG _FREETYPE2_LIBRARIES _FREETYPE2_INCLUDE_DIR)                    
 16                                                                                                                         
 17 MARK_AS_ADVANCED(FREETYPE2_INCLUDE_DIR FREETYPE2_LIBRARIES)                                                             
 18                                                                                                                         
 19 # Set up output variables                                                                                               
 20 if (FREETYPE2_FOUND)                                                                                                    
 21   set (FREETYPE2_INCLUDE_DIR ${_FREETYPE2_INCLUDE_DIR})                                                                 
 22   set (FREETYPE2_LIBRARIES ${_FREETYPE2_LIBRARIES})                                                                     
 23 else(FREETYPE2_FOUND)                                                                                                   
 24   set (FREETYPE2_INCLUDE_DIR)                                                                                           
 25   set (FREETYPE2_LIBRARIES)                                                                                             
 26 endif (FREETYPE2_FOUND)     

因此,如果freetype-config --ftversion为2.5.2而不是2.4.8,则这是可行的。如果我把它改成

代码语言:javascript
运行
复制
FIND_PATH(_FREETYPE2_INCLUDE_DIR ft2build.h)
...
if(FREETYPE2_FOUND)
   set (FREETYPE2_INCLUDE_DIR ${_FREETYPE2_INCLUDE_DIR}/freetype2)
   set (FREETYPE2_LIBRARIES ${_FREETYPE2_LIBRARIES})
else
...

我的程序可以在2.4.8中找到自由类型的标题,但是2.5.2失败了。

我如何修改cmake,使它能够工作,而不考虑自由类型的版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 13:30:01

您可以在配置期间执行freetype-config --ftversion,解析其输出并相应地选择FREETYPE2_INCLUDE_DIR

代码语言:javascript
运行
复制
if(_FREETYPE2_INCLUDE_DIR)
    execute_process (COMMAND "freetype-config" "--ftversion"
        OUTPUT_VARIABLE version_output)
    string (REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)"
        FREETYPE2_VERSION "${version_output}")
    set(FREETYPE2_VERSION_MAJOR ${CMAKE_MATCH_1})
    set(FREETYPE2_VERSION_MINOR ${CMAKE_MATCH_2})
    set(FREETYPE2_VERSION_TWEAK ${CMAKE_MATCH_3})

    if(FREETYPE2_VERSION_MINOR EQUAL "4")
        set (FREETYPE2_INCLUDE_DIR ${_FREETYPE2_INCLUDE_DIR}/freetype2)
    else()
        set (FREETYPE2_INCLUDE_DIR ${_FREETYPE2_INCLUDE_DIR})
    endif()
endif()

通过将与版本相关的变量具体化,您还可以在version调用中允许find_package()请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31327385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档