如何为C++ CMake项目添加NuGet package.config文件
在CMake中处理WinUI3的NuGet依赖(package.config)
CMake本身没有原生支持NuGet的packages.config,得靠自定义脚本调用NuGet CLI来完成包还原,下面是两种实用方案:
方案1:直接在CMakeLists里添加自定义命令
- 先确认电脑上已安装NuGet CLI,且命令行中能直接执行
nuget命令 - 在你的CMakeLists.txt中加入以下逻辑:
# 指定packages.config路径和NuGet包存放目录 set(NUGET_PACKAGE_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/packages.config") set(NUGET_PACKAGES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/packages") # 添加自定义命令,构建前自动还原NuGet包 add_custom_command( OUTPUT "${NUGET_PACKAGES_DIR}" COMMAND nuget restore "${NUGET_PACKAGE_CONFIG}" -PackagesDirectory "${NUGET_PACKAGES_DIR}" MAIN_DEPENDENCY "${NUGET_PACKAGE_CONFIG}" COMMENT "Restoring NuGet packages from packages.config..." ) # 将包还原操作关联到你的WinUI3项目目标 add_executable(YourWinUI3App [你的源文件列表]) add_dependencies(YourWinUI3App "${NUGET_PACKAGES_DIR}")
方案2:用ExternalProject模块实现灵活控制
如果需要指定NuGet版本、处理复杂依赖流程,可以用CMake的ExternalProject模块:
include(ExternalProject) ExternalProject_Add( NuGetRestore PREFIX "${CMAKE_CURRENT_BINARY_DIR}/nuget" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND nuget restore "${CMAKE_CURRENT_SOURCE_DIR}/packages.config" -PackagesDirectory "${CMAKE_CURRENT_SOURCE_DIR}/packages" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/packages.config" ) # 关联到你的WinUI3项目目标 add_executable(YourWinUI3App [你的源文件列表]) add_dependencies(YourWinUI3App NuGetRestore)
额外注意事项
包还原完成后,需要手动在CMake中配置WinUI3的依赖路径:
- 找到
Microsoft.UI.Xaml等包的头文件目录,添加到项目包含路径:find_path(MICROSOFT_UI_XAML_INCLUDE_DIR NAMES "winrt/Microsoft.UI.Xaml.h" PATHS "${NUGET_PACKAGES_DIR}/Microsoft.UI.Xaml.*/build/native/include" ) target_include_directories(YourWinUI3App PRIVATE "${MICROSOFT_UI_XAML_INCLUDE_DIR}") - 根据包内容,将对应的链接库路径和库文件添加到
target_link_libraries中,确保编译时能找到WinUI3相关组件
内容的提问来源于stack exchange,提问作者Harshith
相关产品推荐
相关产品推荐

