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

Я пытаюсь получить конан работая в тестовом проекте, следуя руководство по началу работы так что я могу начать использовать его в реальном проекте. Я пытаюсь использовать 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.

0

Решение

Вы должны сказать 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)
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]