天天看点

使用cmake安装nuget使用cmake安装nuget思路实现注意

使用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 )

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 -beta)
           

注意

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

继续阅读