使用cmake安装nuget

目前在vs上c++项目对第三方库的引用通过nuge来引用。但是一些跨平台项目使用cmake构建,cmake生成脚本中没有提供nuget的支持。

使用nuget本质就是导入了一个从服务器上下载的targets文件,cmake3.8支持了向项目中添加targets文件。所以可以借助这一特性间接的使得cmake脚本支持nuget。

本文章所述内容必须要使用cmake3.8及以上才有效

思路

使用nuget本质就是在项目配置里导入了一个从服务器上下载的包中的targets文件,那么只要使用CMAKE脚本完成这些步骤就行。

首先nuget.exe命令行程序是可以下载指定的包的,那么只要在cmake脚本中调用nuget下载包后把包中的targets文件导入项目就行。

cmake脚本中执行其他程序需要使用execute_process命令

cmake中导入targets文件需要使用target_link_libraries命令

实现

为方便现将安装nuget的功能整理封装成一个cmake宏,可单独存放在一个cmake文件中在其他脚本中用include命令包含方便调用。


cmake_minimum_required(VERSION 3.8)macro(INSTALL_NUGET target id version)if (CMAKE_GENERATOR MATCHES "Visual Studio.*")unset(nuget_cmd)list(APPEND nuget_cmd install ${id} -Prerelease -Version ${version} -OutputDirectory ${CMAKE_BINARY_DIR}/packages)message("excute nuget install:${nuget_cmd}")execute_process(COMMAND nuget ${nuget_cmd} ENCODING AUTO)target_link_libraries(${target} ${CMAKE_BINARY_DIR}/packages/${id}.${version}/build/native/${id}.targets)else()message(FATAL_ERROR "INSTALL_NUGET noly use in Visual Studio")endif()endmacro()

宏的名字是INSTALL_NUGET ,接收三个参数,第一个是需要安装nuget的目标,第二个是包的id,第三个是包的版本。

逻辑:

  • 声明cmake最低版本
  • 判断是否是vs平台,否则给提示结束
  • 根据参数拼接出nuget的命令行参数。
  • 下载nuget包到cmake运行目录下的packages目录。
  • 将下载的包中的targets文件导入项目

使用示例:

ADD_LIBRARY(Framework STATIC ${SRC_FILES})
INSTALL_NUGET(Framework boost.native.static.v140.md 1.5.9-beta)

注意

使用此方法管理nuget后,所有对nuget的管理都只能在cmake脚本中改动。不能使用vs中的nuget插件来管理nuget。

使用cmake安装nuget相关推荐

  1. Centos6.0 64位MySQL 5.5.20 CMake 安装部署

    Centos6.0 64位下 MySQL 5.5.20 CMake 安装部署 一.下载所需软件 linux用 wget 下载需要的软件,保存到目录 /usr/local/src 下 wget ftp: ...

  2. centos7 cmake安装mysql_centos7 安装cmake

    在CentOS安装CMake (CentOS7 64位适用) 在CentOS安装CMake 转自:http://www.cnblogs.com/mophee/archive/2013/03/19/29 ...

  3. OpenCV+Qt+CMake安装+十种踩坑

    平台:win10 x64+opencv-3.4.1 + qt-x86-5.9.0 + cmake3.13.4 x64 OpenCV+Qt+CMake安装,及目前安装完后打包:mingw32-make时 ...

  4. OpenCV:使用git和cmake安装Tesserac

    OpenCV 使用git和cmake安装Tesseract 使用git和cmake安装Tesseract 使用git和cmake安装Tesseract 1.我们假设您在c:/ lib中安装了openc ...

  5. linux cmake 安装mysql5.5.11,以及更高版本

    今天下了一个mysql5.5.12,安装的时候才发现里面根本没有configure文件,mysql服务器的安装,我都不知道自己装过多少次了,没有这个怎么编译,上网查了一下,原来要用cmake来安装.下 ...

  6. 使用 nuget server 的 API 来实现搜索安装 nuget 包

    使用 nuget server 的 API 来实现搜索安装 nuget 包 Intro nuget 现在几乎是 dotnet 开发不可缺少的一部分了,还没有用过 nuget 的就有点落后时代了,还不快 ...

  7. cmake 安装mysql5.6_CMAKE安装MYSQL 5.6.10

    mysql5.6.10不支持configure安装了,提供了CMAKE安装方式 #sudo groupadd mysql #sudo useradd mysql -g mysql #sudo mkdi ...

  8. Win10中docker安装nuget服务器及使用

    目录 简介 具体实现 创建容器 上传包 如何使用 总结 推荐阅读 简介 如果你了解python,那么它类似pip.如果你了解nodejs,那么它类似npm.对于.net平台,nuget就是python ...

  9. cmake安装配置及入门指南

    前言 今天,从github下载代码学习,让我用cmake编译,纳尼?make我知道,cmake是啥鬼?天啊,无知很可怕!赶紧mark一波,虽然很耽误学习进度,但感觉还是要get一波! 一.安装准备 感 ...

最新文章

  1. ios app证书申请基本流程
  2. 【005】◀▶ C#学习笔记(四)(集合)
  3. 【PAT乙级】1047 编程团体赛 (20 分)
  4. VTK:Filtering之TriangulateTerrainMap
  5. 通过Java Api与HBase交互(转)
  6. Vue--- 一点车项目
  7. 码农即将被淘汰?未来10年,这样的程序员才值钱!
  8. 漫步数理统计十七——条件分布与期望
  9. 【华为云技术分享】【极客思考】设计模式:你确定你真的理解了单例模式吗?
  10. sql实现从两个表获取字段组成表数据再插入到函数表中
  11. android 盒子刷 下载,一加5刷机盒子
  12. studioone机架效果模板_studioone3机架效果包
  13. ubuntu生成pem证书连接服务器(已验证)
  14. AD15的PCB设计流程及基本设置
  15. mysql临时表创建_MYSQL临时表创建索引
  16. 荣耀8x手机换电池实战
  17. UniApp已经接了手机数据线,但运行工具警告 “没有检查到设备“ (华为手机为例 进行解决)
  18. 【shell】shell-判断两个ip是否在同一个网段
  19. 【触摸屏功能测试】昆仑通态MCGS——物联网功能测试
  20. netlink怎么读_跑长途的时候如何不寂寞,车机互联G-Netlink全解说明

热门文章

  1. city-picker的使用
  2. w10重装最简单的一个方法
  3. linux查看网口流量ifconfig,ifconfig与网络流量监控
  4. Java找到1-1000以内所有可以被3整除并可以被7整除的数。
  5. Map array 和 array
  6. Python深度学习13——Keras模型的可视化(神经网络结构图)
  7. Java使用Aspose组件进行多文档间的转换操作
  8. 不同意安装条款就没法使用?新法规对APP霸王条款说“不”
  9. [VB.NET]想做一个小界面,不知用什么做
  10. Linux系统中端口映射是什么意思?