Как я могу решить неопределенные эталонные ошибки с помощью Conan и SDL2 в Ubuntu 16.10?

Я пытаюсь заставить conan работать в тестовом проекте, следуя их руководство по началу работы, чтобы я мог начать использовать его в реальном проекте. Я пытаюсь использовать SDL2 с glew в проекте C ++, скомпилированном с g ++ на Ubuntu 16.10 x64.

Мой файл conanfile.txt выглядит так:

[requires]
SDL2/2.0.5@lasote/stable
glew/2.0.0@coding3d/stable

[generators]
cmake

Мой файл CMakeLists.txt выглядит так:

project(conantest)

cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_STANDARD 11)

include(conan/conanbuildinfo.cmake)
conan_basic_setup()

set(SRC_FILES main.cpp Display.cpp)
add_executable(conantest ${SRC_FILES})

Мой проект состоит из каталога, содержащего CMakeLists.txt, conanfile.txt, весь мой исходный код, каталога сборки для Cmake, каталога conan для Conan и rebuild.sh. Я использую этот сценарий rebuild.sh для очистки и сборки проекта всякий раз, когда я вношу изменения в среду сборки (rm -r, хотя и неоптимально, когда он работает, существует, чтобы гарантировать, что любые ошибки из предыдущей установки будут удалены, как только я попытаюсь исправление).

Мой rebuild.sh выглядит так:

rm -r ./build/*
rm -r ./conan/*
cd conan
conan install ..
cd ../build
cmake ..
make

Когда я запускаю этот скрипт, кажется, что все работает, пока не будет связан последний исполняемый файл. Когда это происходит, я получаю Display.cpp:(.text+0x8a): undefined reference to `SDL_Init'. Чтобы решить эту проблему, я попробовал решения здесь и здесь. Хотя они не относятся к SDL, мне не удалось найти никаких ресурсов.

Здесь находится zip-файл с полной средой, Я использую, в том числе MCVE.


person john01dav    schedule 15.04.2017    source источник
comment
Тем, кто голосует против: почему и как мне улучшить вопрос?   -  person john01dav    schedule 15.04.2017


Ответы (1)


Вам нужно указать CMake, чтобы он связался с библиотеками самостоятельно, поскольку conanbuildinfo.cmake не может знать имя вашей цели.

Просто добавьте эту строку в конец вашего CMakeLists.txt файла:

conan_target_link_libraries(conantest)

Эта команда вызовет target_link_libraries для всех зависимостей, указанных в файле conanfile.

Вот еще один CMakeLists.txt пример, если вы хотите использовать более «современный» подход CMake, который больше ориентирован на цели, а не на глобальные настройки:

cmake_minimum_required(VERSION 3.5)
project(conantest)

include(conan/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

add_executable(conantest main.cpp Display.cpp)
set_property(TARGET conantest PROPERTY CXX_STANDARD 11)
target_link_libraries(conantest CONAN_PKG::SDL2 CONAN_PKG::glew)
person Hilborn    schedule 17.04.2017
comment
Вы также можете явно вызвать target_link_libraries: target_link_libraries(conantest ${CONAN_LIBS}) - person lasote; 17.04.2017