如何在 Linux 的 cmake gcc 项目中使用 conan 处理 ImGui-SFML 依赖?

How to use conan to handle ImGui-SFML dependency in a cmake gcc project in Linux?

我想使用 conan, and build an ImGui C++ demo as shown here: using imgui by Elias Daler

处理 Linux 中 C++/cmake/gcc 项目的依赖关系

我已经使用 conan 成功地处理了 Boost 依赖项,但是使用 ImGui-SFML 我遇到了链接错误。

我的conanfile.txt有以下说明:

[requires]
imgui-sfml/2.1@bincrafters/stable

[imports]
bin, *.so -> ./bin
lib, *.a -> ./lib

[generators]
cmake_find_package
cmake_paths
cmake

我将这些行添加到我的 CMakeLists.txt 中以与柯南一起工作:

include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) 

conan_basic_setup()

link_directories(${CONAN_LIB_DIRS}) 
target_link_libraries(my_project ${CONAN_LIBS})

然后,在 build/ 中,我 运行 使用以下命令构建库并安装依赖项:

conan install .. --build imgui-sfml

到目前为止柯南很好,生成了 libImGui-SFML.a(由于 [imports],它也被复制到 build/lib,尽管我认为不需要复制因为我要添加 link_directories() 指令)。

然后,我生成 makefile

cmake ..

最后,当我尝试构建项目时

cmake --build ./

我收到这些链接错误:

/usr/bin/ld: cannot find -lImGui-SFML
/usr/bin/ld: cannot find -lopenal
/usr/bin/ld: cannot find -lFLAC++
/usr/bin/ld: cannot find -lFLAC

柯南生成的库是静态的:

libFLAC.a
libFLAC++.a
libfreetype.a
libImGui-SFML.a
libogg.a
libopenal.a

这 post 看起来相关,但不适用于 ImGui:

程序是否正在寻找共享库?

我是否缺少 conanfile.txtCMakeLists.txt 文件中的某些配置?


编辑:

Conan version 1.25.2

根据这份报告的 issue, this solution for a similar question, and conan's basic setup 文档,在这种情况下 CMakeLists.txt 应该包括:在设置中添加参数 TARGET,然后调用 conan_target_link_libraries通常的target_link_libraries,如下:

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
conan_target_link_libraries(${PROJECT_NAME})

所以 conanfile.txt 只需要这些指令:

[requires]
imgui-sfml/2.1@bincrafters/stable

[generators]
cmake