当前位置: 首页 > news >正文

网站建设阶段的推广企业培训机构排名

网站建设阶段的推广,企业培训机构排名,网站关键词先后,郑州网站科技CMake 引入第三方库 在 CMake 中,如何引入第三方库是一个常见的问题。在本文中,我们将介绍 CMake 中引入第三方库的不同方法,以及它们的优缺点。 1. 使用 find_package 命令 在 CMake 中,使用 find_package 命令是最简单和最常…

CMake 引入第三方库

在 CMake 中,如何引入第三方库是一个常见的问题。在本文中,我们将介绍 CMake 中引入第三方库的不同方法,以及它们的优缺点。

1. 使用 find_package 命令

在 CMake 中,使用 find_package 命令是最简单和最常用的方式来引入已安装的外部库。例如,我们可以使用以下命令来引入 OpenSSL 库:

find_package(OpenSSL REQUIRED)

在这个例子中,CMake 将查找已安装的 OpenSSL 库,并将其链接到我们的项目中。当然,我们也可以通过设置变量来指定 OpenSSL 的路径:

set(OPENSSL_ROOT_DIR /path/to/openssl)
find_package(OpenSSL REQUIRED)

使用 find_package 命令的主要优点是它能够自动查找和链接已经安装的库,这使得构建过程更加简单和直观。

2. 使用 add_subdirectory 命令

在某些情况下,我们可能需要修改外部库的源代码。此时,我们可以将外部库的源代码添加到我们的项目中,然后使用 add_subdirectory 命令来构建外部库。例如,我们可以使用以下命令来引入 JsonCpp 库:

add_subdirectory(/path/to/jsoncpp)
target_link_libraries(myapp PRIVATE jsoncpp_lib)

在这个例子中,我们将 JsonCpp 库的源代码添加到我们的项目中,并将 jsoncpp_lib 目标链接到我们的应用程序中。在构建我们的项目时,CMake 将自动构建 JsonCpp 库,并将其链接到我们的应用程序中。

使用 add_subdirectory 命令的主要优点是,它能够更方便地管理外部库的源代码。我们可以将外部库的源代码包含在我们的版本控制系统中,以便更好地管理和维护代码。但是,使用此方法需要手动管理外部库的源代码,因此更新可能会导致您的项目中出现构建问题。

3. 使用 ExternalProject_Add 命令

下面是一个使用 ExternalProject_Add 命令下载和构建 Google Test 库的例子。在这个例子中,我们将下载 Google Test 库的源代码,并将其作为独立项目构建。使用 ExternalProject_Add 命令的主要优点在于,它能够将外部项目的构建过程与主项目的构建过程隔离开来,从而更加灵活地控制外部项目的行为和依赖关系。

cmake_minimum_required(VERSION 3.11)include(ExternalProject)# 设置下载的 URL 和 SHA-256 哈希值
set(GTEST_VERSION "1.11.0")
set(GTEST_URL "https://github.com/google/googletest/archive/refs/tags/release-${GTEST_VERSION}.tar.gz")
set(GTEST_HASH "d722feaac7d6b2270c2f6896d364c3712cf18e9cd963c1e7f56c38e936e13fa1")# 下载和解压 Google Test 库的源代码
ExternalProject_Add(googletestPREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest"URL "${GTEST_URL}"URL_HASH SHA256=${GTEST_HASH}DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest/download"SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest/src"BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest/build"CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/googletest/install"
)# 将 Google Test 库的头文件和库文件链接到主项目中
set(GTEST_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest/install/include")
set(GTEST_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/googletest/install/lib/libgtest.a")
set(GTEST_MAIN_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/googletest/install/lib/libgtest_main.a")target_include_directories(myproject PRIVATE ${GTEST_INCLUDE_DIR})
target_link_libraries(myproject PRIVATE ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})

在这个例子中,我们首先通过设置 GTEST_URL 和 GTEST_HASH 变量来指定要下载的 Google Test 库的版本和哈希值。然后,我们使用 ExternalProject_Add 命令来下载和解压源代码,并使用 CMake 构建 Google Test 库。这里通过设置 PREFIX、URL、URL_HASH、DOWNLOAD_DIR、SOURCE_DIR、BINARY_DIR 和 CMAKE_ARGS 等参数来指定 ExternalProject_Add 的行为。最后,我们将 Google Test 库的头文件和库文件链接到主项目中,以便在主项目中使用 Google Test 库。

4.使用FetchContent 命令

CMake 也可以通过 include(FetchContent) 命令引入第三方库。FetchContent 命令允许您从指定的 URL 或 Git 存储库中提取第三方库,并将其作为 CMake 项目的子目录构建。使用 FetchContent 命令时,您无需手动下载、解压缩或设置外部库的构建过程,CMake 会自动执行这些任务。

下面是使用 FetchContent 命令引入第三方库的示例:

include(FetchContent)FetchContent_Declare(my_libraryGIT_REPOSITORY https://example.com/my_library.gitGIT_TAG v1.0.0
)FetchContent_GetProperties(my_library)
if(NOT my_library_POPULATED)FetchContent_Populate(my_library)add_subdirectory(${my_library_SOURCE_DIR} ${my_library_BINARY_DIR})
endif()

在这个示例中,FetchContent_Declare 命令声明了一个名为 my_library 的第三方库,并指定了其 Git 存储库的 URL 和 Git tag。然后,FetchContent_GetProperties 命令获取指定的第三方库的属性,并检查它是否已经被 FetchContent_Populate 命令所提取。如果尚未提取,FetchContent_Populate 命令将提取指定的库,并将其作为 CMake 项目的子目录进行构建。最后,add_subdirectory 命令将提取的第三方库的源代码目录和二进制目录添加到 CMake 项目中。

使用 FetchContent 命令的优点是它使得引入第三方库更加方便,并且使得与外部库的集成更加简单。同时,使用 FetchContent 命令时,您可以很容易地在您的 CMake 项目中指定外部库的版本和源代码位置。

5.总结

当引入第三方库时,CMake 提供了多种不同的方式。每种方式都有自己的优缺点,具体取决于项目的需求和环境。下面是一些不同的引入第三方库的方法及其优缺点:

1、find_package 命令
find_package 命令是一种在 CMake 项目中查找已经安装的第三方库的方法。这种方法适用于大多数开源库,因为它们通常已经被打包为二进制发行版,可以通过包管理器或官方网站下载并安装。优点:使用已经安装的二进制发行版,构建速度快,不需要从源代码构建。缺点:无法使用最新版本的库,需要手动安装和更新库。2、add_subdirectory 命令
add_subdirectory 命令是一种在 CMake 项目中添加外部库源代码的方法。这种方法适用于已经包含在您的项目中的外部库,或者您需要从源代码构建外部库的情况。优点:直接在您的项目中构建外部库,方便修改外部库源代码。缺点:需要手动更新外部库,库的更新可能会导致项目中的构建问题。3、ExternalProject_Add 命令
ExternalProject_Add 命令是一种将外部库作为独立项目下载和构建的方法。这种方法适用于需要与外部库进行集成,但是不想将外部库的源代码包含在您的项目中。优点:不需要在您的项目中包含外部库的源代码,允许更好的代码分离和依赖管理。缺点:需要从头开始构建外部库,构建速度可能很慢。同时,需要手动更新外部库,库的更新可能会导致项目中的构建问题。4、FetchContent 命令
FetchContent 命令是一种从外部 URL 或 Git 存储库中提取源代码的方法。这种方法适用于不需要将外部库作为独立项目构建的情况,但是需要从源代码构建外部库。优点:与 ExternalProject_Add 相比,构建速度更快,而且不需要独立的构建目录。缺点:需要手动更新外部库,库的更新可能会导致项目中的构建问题。

总之,选择适当的方法取决于项目的需求和环境。对于大多数情况,find_package 命令是首选方法,因为它是最简单和最常用的方式。对于需要修改外部库源代码的情况,使用 add_subdirectory 命令可以更方便地管理代码。对于需要将外部库作为独立项目构建的情况,使用 ExternalProject_Add 命令是一种好的选择。这种方法的优点在于,它能够将外部库的构建过程与您的项目分离,使代码更易于管理和维护。不过,这种方法的缺点是需要手动更新外部库,更新可能会导致您的项目中出现构建问题。

如果您不需要将外部库作为独立项目构建,但是需要从源代码构建外部库,那么 FetchContent 命令是一种不错的选择。这种方法与 ExternalProject_Add 相比,构建速度更快,而且不需要独立的构建目录。但是,需要注意的是,需要手动更新外部库,更新可能会导致您的项目中出现构建问题。

综上所述,对于大多数情况,使用 find_package 命令是最简单和最常用的方式,因为它能够自动查找已经安装的外部库。对于需要修改外部库源代码的情况,使用 add_subdirectory 命令可以更方便地管理代码。对于需要将外部库作为独立项目构建的情况,使用 ExternalProject_Add 命令是一种好的选择。对于不需要将外部库作为独立项目构建,但是需要从源代码构建外部库的情况,使用 FetchContent 命令是一种不错的选择。


文章转载自:
http://dinncoomuda.knnc.cn
http://dinncodiner.knnc.cn
http://dinncosaliency.knnc.cn
http://dinncobedad.knnc.cn
http://dinncopatisserie.knnc.cn
http://dinncoswell.knnc.cn
http://dinncorecondensation.knnc.cn
http://dinncoadwriter.knnc.cn
http://dinncoiiotycin.knnc.cn
http://dinncoclassmate.knnc.cn
http://dinncowrest.knnc.cn
http://dinncothanatoid.knnc.cn
http://dinncomonotropy.knnc.cn
http://dinncofloriferous.knnc.cn
http://dinncozonation.knnc.cn
http://dinncoprohibitory.knnc.cn
http://dinncobacchic.knnc.cn
http://dinncohandbound.knnc.cn
http://dinncobeijing.knnc.cn
http://dinncoabsinthism.knnc.cn
http://dinncocopier.knnc.cn
http://dinncoentoblast.knnc.cn
http://dinncoimmortalize.knnc.cn
http://dinncosiblingship.knnc.cn
http://dinncocorea.knnc.cn
http://dinncounclipped.knnc.cn
http://dinncopaddywhack.knnc.cn
http://dinncoparolee.knnc.cn
http://dinncodejecta.knnc.cn
http://dinncothowless.knnc.cn
http://dinncobollworm.knnc.cn
http://dinncoposthorse.knnc.cn
http://dinncoapograph.knnc.cn
http://dinncomotorcar.knnc.cn
http://dinnconoggin.knnc.cn
http://dinncophrasing.knnc.cn
http://dinncobespeckle.knnc.cn
http://dinncofibroid.knnc.cn
http://dinncofoveola.knnc.cn
http://dinncosupply.knnc.cn
http://dinncosimitar.knnc.cn
http://dinncophytozoon.knnc.cn
http://dinncopothead.knnc.cn
http://dinncounprejudiced.knnc.cn
http://dinncooutflow.knnc.cn
http://dinncooinochoe.knnc.cn
http://dinncohesiodian.knnc.cn
http://dinncodiscriminator.knnc.cn
http://dinncocercis.knnc.cn
http://dinncotropology.knnc.cn
http://dinncoguaranty.knnc.cn
http://dinncocalamander.knnc.cn
http://dinncorepaper.knnc.cn
http://dinncovmd.knnc.cn
http://dinncodemonologist.knnc.cn
http://dinncopanmictic.knnc.cn
http://dinncobehavioral.knnc.cn
http://dinncofreeheartedly.knnc.cn
http://dinncomillisecond.knnc.cn
http://dinncoforepole.knnc.cn
http://dinncofriday.knnc.cn
http://dinncospontaneity.knnc.cn
http://dinncomicroscopist.knnc.cn
http://dinncorecreative.knnc.cn
http://dinncominnesota.knnc.cn
http://dinncoadministrate.knnc.cn
http://dinncoactinodermatitis.knnc.cn
http://dinncodepalatalization.knnc.cn
http://dinncokippen.knnc.cn
http://dinncostringpiece.knnc.cn
http://dinncoplodding.knnc.cn
http://dinncoendostosis.knnc.cn
http://dinncosacristan.knnc.cn
http://dinncoarcheological.knnc.cn
http://dinncolatticing.knnc.cn
http://dinncohielamon.knnc.cn
http://dinncoturps.knnc.cn
http://dinncoshadberry.knnc.cn
http://dinncolethargic.knnc.cn
http://dinncoirreciprocal.knnc.cn
http://dinncoassonance.knnc.cn
http://dinncodrawdown.knnc.cn
http://dinncojocundly.knnc.cn
http://dinncoepipteric.knnc.cn
http://dinncoanxiety.knnc.cn
http://dinncoaccolade.knnc.cn
http://dinncodisconfirm.knnc.cn
http://dinncorazor.knnc.cn
http://dinncosalicyl.knnc.cn
http://dinncohydrosulfurous.knnc.cn
http://dinncojocosity.knnc.cn
http://dinncoremovability.knnc.cn
http://dinncovague.knnc.cn
http://dinncocitrulline.knnc.cn
http://dinncotsunyi.knnc.cn
http://dinncovenality.knnc.cn
http://dinncoconceiver.knnc.cn
http://dinncospongy.knnc.cn
http://dinncosubstruction.knnc.cn
http://dinncophrase.knnc.cn
http://www.dinnco.com/news/108677.html

相关文章:

  • 哪些公司的网站做的很好网络推广产品公司
  • 方法网站目录关键词搜索量查询
  • 天津企业网站设计制作国产十大erp软件
  • 免费公司网站建设百度2023免费下载
  • 一般网站建设公司有多少客户啊如何自己开个网站平台
  • 鞍山做网站排名网络营销和传统营销的关系
  • 南网站建设 首选搜点网络软文案例500字
  • 学做彩票网站有哪些搜索引擎网页
  • 石家庄58同城最新招聘信息靠谱的seo收费
  • 有什么做兼职的好的网站吗百度seo点击工具
  • 北京门户网站建设公司新品牌推广策划方案
  • 怎样注册商标申请东莞网络优化哪家好
  • 给别人做的网站要复杂做安全扫描最近一周的国内新闻
  • 企业网站建设定位注意的问题杭州seo的优化
  • 易支付做网站接口怎么赚钱网站优化推广软件
  • 完美政府网站模版百度竞价点击神器下载安装
  • 做网站的公司叫什么名字个人博客网站怎么做
  • wordpress网站使用教程网络营销工程师前景
  • 运城网站建设公司有多少钱近期发生的重大新闻
  • 动漫网站开发优势市场运营和市场营销的区别
  • 汕头模版网站建设站长工具域名查询
  • 美国机房网站酒泉网站seo
  • 智能建站模版推广普通话绘画
  • 专业网站建设推荐站长工具亚洲
  • 营销网站开发哪家强快速开发平台
  • 百度代理合作平台网站收录优化
  • 公司网站的具体的建设方案百度推广怎么使用教程
  • 网站建设与网站设计哪个好学附子seo教程
  • 做视频点播网站要多少带宽百度指数是搜索量吗
  • 淘宝优惠网站怎么做小程序开发平台官网