我试图通过跟随conan让their 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
。为解决此问题,我尝试了解决方案here和here。虽然这些并不特定于SDL,但我无法找到任何资源。
Here是我正在使用的完整环境的zip文件,包括MCVE。
答案 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)