如何在Ubuntu 16.10上使用Conan和SDL2解决未定义的引用错误?

时间:2017-04-15 04:49:39

标签: c++ ubuntu conan

我试图通过跟随conantheir Geting Started guide在测试项目中工作,以便我可以在实际项目中开始使用它。我试图在Ubuntu 16.10 x64上用g ++编译的C ++项目中使用SDL2和glew。

我的conanfile.txt看起来像这样:

let vote_status = Stream["vote_status"] as? String ?? "0"

我的CMakeLists.txt文件如下所示:

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

[generators]
cmake

我的项目包含一个目录,其中包含CMakeLists.txt,conanfile.txt,我的所有源代码,Cmake的构建目录,Conan的conan目录以及rebuild.sh。我正在使用这个rebuild.sh脚本来清理和构建项目,每当我对构建环境进行更改时(rm -r' s,虽然它在工作时是次优的,但是确保先前设置中的任何错误都是我尝试修复后删除了。)

我的rebuild.sh看起来像这样:

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})

当我运行这个脚本时,一切似乎都在工作,直到 最终可执行文件已链接发生这种情况时,我会得到rm -r ./build/* rm -r ./conan/* cd conan conan install .. cd ../build cmake .. make 。为解决此问题,我尝试了解决方案herehere。虽然这些并不特定于SDL,但我无法找到任何资源。

Here是我正在使用的完整环境的zip文件,包括MCVE。

1 个答案:

答案 0 :(得分:3)

您需要告诉CMake自己链接库,因为conanbuildinfo.cmake无法知道目标的名称。

只需将此行添加到CMakeLists.txt文件的底部即可:

conan_target_link_libraries(conantest)

此命令将为conanfile中指定的所有依赖项调用target_link_libraries

这是另一个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)