如何在 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.txt
或 CMakeLists.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
我想使用 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.txt
或 CMakeLists.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