c++ - 如何正确#include conan 包?

标签 c++ package include conan

我有以下 cmake 配置。

  conan_cmake_configure(REQUIRES
                        catch2/2.13.7
                        fmt/6.1.2
                        termcolor/2.0.0
                        date/3.0.1
                        asio/1.20.0
                        tl-expected/20190710
                        GENERATORS cmake_find_package)

...
...
...

find_package(fmt REQUIRED)
include_directories(${fmt_INCLUDE_DIR})
link_libraries(${fmt_LIBRARIES})

find_package(termcolor REQUIRED)
include_directories(${termcolor_INCLUDE_DIR})
link_libraries(${termcolor_LIBRARIES})

find_package(date REQUIRED)
include_directories(${date_INCLUDE_DIR})
link_libraries(${date_LIBRARIES})

find_package(asio REQUIRED)
include_directories(${asio_INCLUDE_DIR})
link_libraries(${asio_LIBRARIES})

find_package(tl-expected REQUIRED)
include_directories(${tl-expected_INCLUDE_DIR})
link_libraries(${tl-expected_LIBRARIES})

我可以像这样 #include 库:

#include <asio.hpp>
#include <fmt/format.h>

但我没有找到任何有关如何 #include expected lib 的信息。我已经尝试过 expected.hpphttps://github.com/hannahwhy/conan-tl-expected/blob/stable/1.0.1/test_package/example.cpp 中的示例

这是 fatal error C1083:没有这样的文件或目录

最佳答案

我没有使用 conan_cmake_configure 包装器,但使用 targets 是推荐的现代 CMake 方法。您正在使用的 conan cmake 包装器的自述文件中有一些应该有用的片段。

基本上,cmake_find_package 生成器将从包中定义 CMake 目标,并在每个目标上定义属性,例如包含目录、库、编译定义等。每当您使用 target_link_libraries(TargetA TargetB) 时,所有传递依赖项都将由 CMake 处理,而无需担心指定包含目录等(您也应该为自己的项目使用目标)。

因此,与 fmt 的链接非常简单(取自 cmake 包装器存储库上的示例):

find_package(fmt)

add_executable(main main.cpp)
target_link_libraries(main fmt::fmt)

如果您想确定包声明的目标,可以检查 conan 创建的 CMake 配置文件。

编辑:刚刚意识到这本身并不能回答您的问题,但这使得更容易理解出了什么问题。在您当前的 CMake 代码中,${x_LIBRARIES} 可能只是空的,您无法直接意识到它。对于目标,如果您尝试链接错误的包名称,CMake 将抛出错误。

关于c++ - 如何正确#include conan 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69751515/

相关文章:

c++ - __m128i 变量是否为零?

c++ - 使对 unsigned char 线程安全(原子)的访问

visual-studio - Visual Studio 2019 - 包未正确加载

c++ - 将C++类代码分割成多个文件,有哪些规则?

php include 输出两个双引号

C++:如何要求一种模板类型派生自另一种

c++ - 使用 GDAL 读取栅格目录

python - 如何在Python中以编程方式调用函数并以编程方式指定模块?

r - 如何使用 R.rsp 在 R 包中包含静态小插图

c - 即使搜索目录正确,GCC 也无法找到 header