Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 从版本2.4.8和2.5.2中查找freetype2库_Cmake_Freetype - Fatal编程技术网

Cmake 从版本2.4.8和2.5.2中查找freetype2库

Cmake 从版本2.4.8和2.5.2中查找freetype2库,cmake,freetype,Cmake,Freetype,我有一个依赖freetype6开发包的程序。在Ubuntu 14.04和12.02上安装此软件包时,会得到不同的版本。执行freetype-config--ftversion时,分别得到2.5.2和2.4.8。我遇到的问题是,当我试图使用cmake查找这些库时。在2.4.8中,它会找到ft2build.h,然后进入,找到标题的其余部分。在2.5.2中,它进入。我没有在cmake中使用内置FindFreeType,因为有些版本已经包含ft2build.h,我希望它使用该目录中的版本,而不是系统中的

我有一个依赖freetype6开发包的程序。在Ubuntu 14.04和12.02上安装此软件包时,会得到不同的版本。执行
freetype-config--ftversion
时,分别得到2.5.2和2.4.8。我遇到的问题是,当我试图使用cmake查找这些库时。在2.4.8中,它会找到ft2build.h,然后进入
,找到标题的其余部分。在2.5.2中,它进入
。我没有在cmake中使用内置FindFreeType,因为有些版本已经包含ft2build.h,我希望它使用该目录中的版本,而不是系统中的版本。这是我的定制FindFreeTypeTwo.cmake的外观

  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,这一点就行了。如果我把它改成

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中找到freetype的标题,但是2.5.2失败了


如何修改cmake,使其在不考虑freetype版本的情况下工作?

您可以在配置期间执行
freetype配置--ftversion
,解析其输出并相应地选择
FREETYPE2\u INCLUDE\u DIR

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()

通过初始化版本相关变量,您还可以在
find_package()
call中允许
version
请求。

搜索包含2.5.2的directirus,然后搜索2.4.8没有帮助吗
FIND_PATH
可以多次发出。FREETYPE2\u INCLUDE_DIR将取决于在哪个目录中找到freetype。这不会导致问题吗?如果内置的
FindFreetype.cmake
找到的是您的安装而不是系统安装,它会为您工作吗?如果是这样,您可以尝试(1)通过设置路径变量,例如
cmake\u PREFIX\u path
cmake\u INCLUDE\u path
FREETYPE\u DIR
,为
FindFreetype.cmake
提供提示。(2) 复制整个内置的
FindFreetype.cmake
,并修改出错的地方。