开罗图书馆和Cmake

Cairo library and Cmake

本文关键字:Cmake 图书馆      更新时间:2023-10-16

我是c++和cmake的新手。我通过端口安装了开罗图书馆。现在我想将开罗纳入我的项目。我编写了 CmakeLists.txt 命令,如下所示。

cmake_minimum_required(VERSION 3.6)
project(HelloOpenGL)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(HelloOpenGL ${SOURCE_FILES})
#find_package(ImageMagick COMPONENTS Magick++)
#include_directories(${ImageMagick_INCLUDE_DIRS})
#target_link_libraries(HelloOpenGL ${ImageMagick_LIBRARIES})
find_package(Cairo)
include_directories(${Cairo_INCLUDE_DIRS})
target_link_libraries(HelloOpenGL ${Cairo_LIBRARIES})
if(CAIRO_FOUND)
    message("Cairo found")
    else()
    message("Cairo not found")
    endif()

但它不起作用,我得到这个输出 -

CMake Warning at CMakeLists.txt:16 (find_package):
  By not providing "FindCairo.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Cairo", but
  CMake did not find one.
  Could not find a package configuration file provided by "Cairo" with any of
  the following names:
    CairoConfig.cmake
    cairo-config.cmake
  Add the installation prefix of "Cairo" to CMAKE_PREFIX_PATH or set
  "Cairo_DIR" to a directory containing one of the above files.  If "Cairo"
  provides a separate development package or SDK, be sure it has been
  installed.

请帮我正确包括开罗

问题是你的 CMake 版本没有(顺便说一句,即使是 CMake 的最新开发版本也没有它......https://gitlab.kitware.com/cmake/cmake/tree/master/Modules)该文件FindCairo.cmake运行命令所需的find_package(Cairo),并且尚未将此文件包含在包中。
解决方案是从 Web 获取一个FindCairo.cmake文件,在项目的根目录中创建一个cmake目录,并CMakeLists.txt额外的行

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

因此,您来自CMakeLists.txt的代码段如下所示:

cmake_minimum_required(VERSION 3.6)
project(HelloOpenGL)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(HelloOpenGL ${SOURCE_FILES})
#find_package(ImageMagick COMPONENTS Magick++)
#include_directories(${ImageMagick_INCLUDE_DIRS})
#target_link_libraries(HelloOpenGL ${ImageMagick_LIBRARIES})
find_package(Cairo)
include_directories(${Cairo_INCLUDE_DIRS})
target_link_libraries(HelloOpenGL ${Cairo_LIBRARIES})

如果您不使用已经存在的FindCairo.cmake(例如,您安装的Cairo可能包含一个这样的文件),则必须编写一个或找到包含软件包的替代方法。