参考文章:
添加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
指定包名与包版本,语法:
包名_包版本
set_property(TARGET ${PROJECT_NAME}
PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.6"
)
获取范围内的任何版本,使用分号引用多个包
set_property(TARGET ${PROJECT_NAME}
PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.*;ExcelDna.AddIn_1.0.0"
)
VSDOTNET_REFERENCE
您可以使用VSDOTNET_REFERENCE
set_property(TARGET ${PROJECT_NAME} PROPERTY
VS_DOTNET_REFERENCE_ExcelDna.Integration
${CMAKE_BINARY_DIR}/packages/ExcelDna.Integration.0.34.6/lib/ExcelDna.Integration.dll
)
NuGet命令行
要求cmake3.8
使用nuget本质就是导入了一个从服务器上下载的targets文件,cmake3.8支持了向项目中添加targets文件。所以可以借助这一特性间接的使得cmake脚本支持nuget
- 首先nuget.exe命令行程序是可以下载指定的包的,那么只要在cmake脚本中调用nuget下载包后把包中的targets文件导入项目就行。
- cmake脚本中执行其他程序需要使用execute_process命令
- 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()
使用例子
ADD_LIBRARY(Framework STATIC ${SRC_FILES}) INSTALL_NUGET(Framework boost.native.static.v140.md 1.5.9-beta)
<a name="jni5D"></a>
## 添加程序依赖包
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” ) ```