Подключение пакетов CMAKE с использованием FIND_PACKAGE

160
17 августа 2018, 01:10

Возможно тема вопроса старая, и множество ответов на нее есть. В общем, при компилировании проектов с github при попытке установки все происходит успешно, файл поиска библиотеки копируется в папку

-- Installing: /usr/local/share/cmake/Modules/FindSDL2PP.cmake

Но, при попытке подключения пакета через FIND_PACKAGE, cmake всегда говорит что не может найти файл поиска библиотеки, при том что если пакеты устанавливать из терминала, ту же библиотеку libvlc-dev, libvlccore-dev или любую другую, cmake никогда не найдет пакеты через FIND_PACKAGE.

CMakeLists.txt:

set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} main.cpp)
set(SDL2_INCLUDE_DIR /usr/include/SDL2/)
set(SDL2_LIBRARY /usr/lib/)
find_file(SDL2_INCLUDE_DIR NAME SDL.h HINTS SDL2)
find_library(SDL2_LIBRARY NAME SDL2)
FIND_PACKAGE(SDL2PP REQUIRED)
INCLUDE_DIRECTORIES(${SDL2PP_INCLUDE_DIRS})
target_include_directories(${PROJECT_NAME} PRIVATE ${SDL2_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} SDL2)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2PP_LIBRARIES})
CMake Error at CMakeLists.txt:6 (FIND_PACKAGE):
  By not providing "FindSDL2PP.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SDL2PP", but
  CMake did not find one.
  Could not find a package configuration file provided by "SDL2PP" with any
  of the following names:
    SDL2PPConfig.cmake
    sdl2pp-config.cmake
  Add the installation prefix of "SDL2PP" to CMAKE_PREFIX_PATH or set
  "SDL2PP_DIR" to a directory containing one of the above files.  If "SDL2PP"
  provides a separate development package or SDK, be sure it has been
  installed.

В чем может быть проблема с поиском библиотек? Уже устал вручную прописывать пути к библиотекам и их заголовочным файлам.

Для поиска SDL2 использую полукостыль такого вида:

set(SDL2_INCLUDE_DIR /usr/include/SDL2/)
set(SDL2_LIBRARY /usr/lib/)
find_file(SDL2_INCLUDE_DIR NAME SDL.h HINTS SDL2)
find_library(SDL2_LIBRARY NAME SDL2)

Вот один из проектов/враппер над SDL2: libSDL2pp

Вывод make && make install:

[ 19%] Built target SDL2pp
[ 21%] Built target ttf
[ 22%] Built target mixer_effects
[ 24%] Built target mixer_music
[ 26%] Built target mixer_music_sine
[ 27%] Built target rendertarget
[ 29%] Built target sprites
[ 31%] Built target audio_wav
[ 32%] Built target audio_sine
[ 34%] Built target image
[ 35%] Built target fill
[ 37%] Built target lines
[ 39%] Built target mixer
[ 41%] Built target live_mixer
[ 43%] Built target live_window
[ 44%] Built target live_rendering
[ 45%] Built target live_audiodevice
[ 46%] Built target test_surface
[ 48%] Built target test_optional
[ 49%] Built target SDL2pp_SDLMixer_hh_test
[ 51%] Built target SDL2pp_Optional_hh_test
[ 52%] Built target SDL2pp_Texture_hh_test
[ 53%] Built target SDL2pp_AudioDevice_hh_test
[ 55%] Built target test_error
[ 57%] Built target SDL2pp_Exception_hh_test
[ 59%] Built target test_color_constexpr
[ 60%] Built target SDL2pp_RWops_hh_test
[ 62%] Built target SDL2pp_ContainerRWops_hh_test
[ 64%] Built target test_wav
[ 66%] Built target SDL2pp_Rect_hh_test
[ 68%] Built target SDL2pp_Window_hh_test
[ 70%] Built target SDL2pp_SDLTTF_hh_test
[ 71%] Built target SDL2pp_Renderer_hh_test
[ 72%] Built target test_font
[ 74%] Built target test_rwops
[ 75%] Built target SDL2pp_Music_hh_test
[ 76%] Built target SDL2pp_Color_hh_test
[ 78%] Built target SDL2pp_SDL_hh_test
[ 80%] Built target SDL2pp_SDL2pp_hh_test
[ 82%] Built target SDL2pp_Surface_hh_test
[ 84%] Built target SDL2pp_Wav_hh_test
[ 86%] Built target test_pointrect_constexpr
[ 88%] Built target SDL2pp_AudioSpec_hh_test
[ 89%] Built target SDL2pp_StreamRWops_hh_test
[ 91%] Built target SDL2pp_Point_hh_test
[ 93%] Built target SDL2pp_Mixer_hh_test
[ 94%] Built target SDL2pp_Font_hh_test
[ 95%] Built target test_pointrect
[ 97%] Built target SDL2pp_SDLImage_hh_test
[ 98%] Built target test_color
[100%] Built target SDL2pp_Chunk_hh_test
Install the project...
-- Install configuration: "Debug"
-- Up-to-date: /usr/local/include/SDL2pp/AudioDevice.hh
-- Up-to-date: /usr/local/include/SDL2pp/AudioSpec.hh
-- Up-to-date: /usr/local/include/SDL2pp/Color.hh
-- Up-to-date: /usr/local/include/SDL2pp/ContainerRWops.hh
-- Up-to-date: /usr/local/include/SDL2pp/Exception.hh
-- Up-to-date: /usr/local/include/SDL2pp/Optional.hh
-- Up-to-date: /usr/local/include/SDL2pp/Point.hh
-- Up-to-date: /usr/local/include/SDL2pp/RWops.hh
-- Up-to-date: /usr/local/include/SDL2pp/Rect.hh
-- Up-to-date: /usr/local/include/SDL2pp/Renderer.hh
-- Up-to-date: /usr/local/include/SDL2pp/SDL.hh
-- Up-to-date: /usr/local/include/SDL2pp/SDL2pp.hh
-- Up-to-date: /usr/local/include/SDL2pp/StreamRWops.hh
-- Up-to-date: /usr/local/include/SDL2pp/Surface.hh
-- Up-to-date: /usr/local/include/SDL2pp/Texture.hh
-- Up-to-date: /usr/local/include/SDL2pp/Wav.hh
-- Up-to-date: /usr/local/include/SDL2pp/Window.hh
-- Up-to-date: /usr/local/include/SDL2pp/SDLTTF.hh
-- Up-to-date: /usr/local/include/SDL2pp/Font.hh
-- Up-to-date: /usr/local/include/SDL2pp/SDLImage.hh
-- Up-to-date: /usr/local/include/SDL2pp/Chunk.hh
-- Up-to-date: /usr/local/include/SDL2pp/Mixer.hh
-- Up-to-date: /usr/local/include/SDL2pp/Music.hh
-- Up-to-date: /usr/local/include/SDL2pp/SDLMixer.hh
-- Installing: /usr/local/include/SDL2pp/Config.hh
-- Installing: /usr/local/include/SDL2pp/Export.hh
-- Up-to-date: /usr/local/include/SDL2pp/external/libcpp_optional.hh
-- Installing: /usr/local/lib/libSDL2pp.a
-- Installing: /usr/local/lib/pkgconfig/sdl2pp.pc
-- Installing: /usr/local/share/cmake/Modules/FindSDL2PP.cmake
Answer 1

Тут видимо проблема в неправильном режиме использования макроса find_package. По-умолчанию он работает в режиме Module и игнорирует модули установленные через install. Соответственно тут имеет смысл использовать его в режиме Config использовав одноименную волшебную директиву:

find_package(SDL2PP CONFIG REQUIRED)
READ ALSO
Вектор в строку С++

Вектор в строку С++

Как превратить вектор в число и перевернуть его на языке С++? В JS это делается вот так:

257
Qt, событие на пункте QMenuBar

Qt, событие на пункте QMenuBar

Имеется верхнее меню, в виде нескольких пунктов, где несколько пунктов меню представляют из себя кнопки, без вложенных пунктовПолный код...

175
Есть ли ресурс для практики на C++? [закрыт]

Есть ли ресурс для практики на C++? [закрыт]

Учусь писать на С++, и переодически, пройдя какую-то тему, приходится просто оставлять её в голове без практикиВ силу нехватки воображения,...

190
Страности с типом int в C++ [закрыт]

Страности с типом int в C++ [закрыт]

Начнём с того, что я ещё совсем "зелёный" в программированииИ тут на днях я баловался с С++

154