Cairo library and Cmake
Asked Answered
F

1

3

I'm new to c++ and cmake. I installed cairo library as written here via port. Now i want to include cairo to my project. I wrote the CmakeLists.txt commands as shown here.

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

But it's not working, I get this output -

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.

Help me to properly include cairo, please

Filia answered 13/1, 2017 at 14:30 Comment(1)
which version of CMake are you using?Boeotia
B
4

The problem is that your version of CMake doesn't have (by the way, not even the latest development version of CMake has it ... https://gitlab.kitware.com/cmake/cmake/tree/master/Modules) the file FindCairo.cmake that you need to have to run the command find_package(Cairo) and you haven't included this file in your package.
A solution is to grab a FindCairo.cmake file from the web, create a cmake directory inside the root directory of your project and have in CMakeLists.txt the extra line

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

so your snippet from CMakeLists.txt would look like:

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

If you will not use an already existing FindCairo.cmake (e.g. Cairo that you installed might contain one such file) you will have to write one or find an alternative way to include the package.

Boeotia answered 13/1, 2017 at 15:52 Comment(2)
I tried what this, but the problem was solved only when I reinstalled cairo through brew install cairo. Now there's a new problem. The IDE cannot find include<cairo.h> . But include<cairo/cairo.h> working well.Filia
However, I get this error message on compilation: Undefined symbols for architecture x86_64: "_cairo_arc", referenced from: ... ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [HelloOpenGL] Error 1 make[2]: *** [CMakeFiles/HelloOpenGL.dir/all] Error 2 make[1]: *** [CMakeFiles/HelloOpenGL.dir/rule] Error 2 make: *** [HelloOpenGL] Error 2Filia

© 2022 - 2024 — McMap. All rights reserved.