cmake 如何从github安装C++20范围库

ee7vknir  于 9个月前  发布在  Git
关注(0)|答案(3)|浏览(131)

我想在我的项目中使用range-v3库,但我不明白如何使用。installation description说:
这个库是只包含头文件的。你可以从github上的range-v3仓库获取源代码。要使用Range-v3编译,只需#include你想要的单个头文件。
这是否意味着我可以复制和粘贴所需的头文件,并将文件路径添加到我的CMake文件?我有点困惑,因为我从来没有包括第三方库。

mctunoxg

mctunoxg1#

注:请参阅hythis'回答更好的解决方案。
这是否意味着我可以复制和粘贴所需的头文件,并将文件路径添加到我的CMake文件?
基本上,是的。首先git clone<path_to_range_v3>。然后将这些行包含到CMakeLists.txt中:

add_library(range_v3 INTERFACE IMPORTED)
set_target_properties(range_v3 PROPERTIES 
    INTERFACE_INCLUDE_DIRECTORIES <path_to_range_v3>/include)

target_link_libraries(your_target PUBLIC range_v3)

字符串

5uzkadbs

5uzkadbs2#

我不知道为什么Evg建议他们这样做,我甚至不认为在2019年你被迫使用ranges-v3(see here, the file existed way before hand)创建自己的CMake接口。无论如何,不要使用Evg的解决方案,ranges-v3是一个 * 好 * 的头部库,为了让头部库成为好的库它必须提供CMake集成
只有头文件的库并不意味着作者不提供CMake支持,或者甚至避免自己使用CMake。糟糕的作者会这样做,就像你在第一时间问这个问题时可能经历的那样。
要正确地与Ranges V3集成,请使用一个packagemanager(尽管有些包管理器会根据其自定义CMake文件的配置方式而将过程搞砸),如Conan或vcpkg,并与各自的CMake解决方案集成,或者将项目添加为git子模块(尽管您也可以git克隆它),然后在CMakeLists.txt中:

add_subdirectory([path to submodules]/range-v3)
...
target_link_libraries(my_target [SCOPE] range-v3::range-v3)

字符串
如果作者没有详细说明如何在CMake项目中使用他们的项目,那么很难确定库的实际目标,我不会责怪任何人发表关于它的SO帖子,这是一种痛苦。
一般来说,如果项目有一个CMakeLists.txt文件,它可能有静态库/子目录cmake集成,但 * 某些 * 库只有安装目标,因此在不编辑其CMakeLists.txt的情况下将其烘焙到源代码中时无法使用
要检查是否是这种情况,或者您是否可以实际使用目标,如果您找不到任何关于如何使用库的CMake文档(我找不到),请执行以下操作:

  • 查看CMakeLists.txt文件内部
  • 找到一个项目别名,通常以project_name::project_name的形式。这就是我找到range-v3的项目别名的方式。
  • 如果你找不到alias(通过搜索::),找到库的实际目标名称(并尝试直接使用它),有时它不会被导出(隐藏在顶部cmake文件的子目录中)。例如,OpenCV不使用:用途::,而是每个组件目标都标记有opencv_[component name],但仍然会被导出。

如果项目没有被配置为正确地用作子模块,否则将被用作静态库,提交问题或PR到给定的存储库,这是一个bug。

vjrehmav

vjrehmav3#

如果使用的是Linux,还可以使用命令sudo apt install librange-v3-dev librange-v3-doc安装range-v3

相关问题