2017-01-13 113 views
3

我是C++和cmake的新手。我通過端口安裝了開羅庫,編寫爲here。現在我想包括開羅到我的項目。我編寫了CmakeLists.txt命令,如here所示。開羅圖書館和Cmake

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. 

幫助我正確地包括開羅,請

+0

您正在使用哪個版本的CMake? – fedepad

回答

3

的問題是,你的CMake的版本沒有(用就連CMake的最新開發版本都沒有... https://gitlab.kitware.com/cmake/cmake/tree/master/ModulesFindCairo.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(您安裝可能包含一個這樣的文件,例如開羅)你將不得不寫一個或找到一個替代辦法,包括包。

+0

我試過這個,但問題只有在我通過'brew install cairo'重新安裝cairo時才解決。現在有一個新問題。 IDE無法找到包含。但包括運作良好。 –

+0

不過,我得到這個錯誤信息在編譯: '對於架構x86_64的未定義符號: 「_cairo_arc」,從引用: ... LD:符號(S)沒有發現建築x86_64的 鐺:錯誤:連接命令失敗,退出代碼1(使用-v查看調用) make [3]:*** [HelloOpenGL]錯誤1 make [2]:*** [CMakeFiles/HelloOpenGL.dir/all] Error 2 make [1]:*** [CMakeFiles/HelloOpenGL.dir/rule] Error 2 make:*** [HelloOpenGL] Error 2' –