参考文章:

  1. CMake CSharp reference nuget packges
  2. 使用cmake安装nuget

添加NuGet的依赖包

VS_PACKAGE_REFERENCES

从CMake 3.15开始,CMake支持使用[VS_PACKAGE_REFERENCES](https://cmake.org/cmake/help/latest/prop_tgt/VS_PACKAGE_REFERENCES.html)来添加一个包引用

将NuGet包添加到Target

  1. 指定包名与包版本,语法:包名_包版本

    1. set_property(TARGET ${PROJECT_NAME}
    2. PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.6"
    3. )
  2. 获取范围内的任何版本,使用分号引用多个包

    1. set_property(TARGET ${PROJECT_NAME}
    2. PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.*;ExcelDna.AddIn_1.0.0"
    3. )

VSDOTNET_REFERENCE

您可以使用VSDOTNET_REFERENCE获取 CMake 来查找您的 Nuget 包引用

  1. set_property(TARGET ${PROJECT_NAME} PROPERTY
  2. VS_DOTNET_REFERENCE_ExcelDna.Integration
  3. ${CMAKE_BINARY_DIR}/packages/ExcelDna.Integration.0.34.6/lib/ExcelDna.Integration.dll
  4. )

NuGet命令行

要求cmake3.8

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

  1. 首先nuget.exe命令行程序是可以下载指定的包的,那么只要在cmake脚本中调用nuget下载包后把包中的targets文件导入项目就行。
  2. cmake脚本中执行其他程序需要使用execute_process命令
  3. cmake中导入targets文件需要使用target_link_libraries命令 ```

cmake_minimum_required(VERSION 3.8)

@target target名称

@target 包的id

@target 包的版本

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

  1. 使用例子

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

  1. <a name="jni5D"></a>
  2. ## 添加程序依赖包

If necessary, link in other library/DLL references, such as 3rd party libraries.

set_property(TARGET MyWinFormApp PROPERTY VS_DOTNET_REFERENCE_MyThirdPartyLib /path/to/libs/MyThirdPartyLib.dll)

Add in the .NET reference libraries.

set_property(TARGET MyWinFormApp PROPERTY VS_DOTNET_REFERENCES “Microsoft.CSharp” “System” “System.Core” “System.Data” “System.Drawing” “System.Windows.Forms” ) ```