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