Party

Yesterday night there was a party in my friend's home, definitely it is a klatch.
I didn't attend it, I am tired of hearing complain,talking about other people's
private life and the conversation about money,cars,houses same with the talk before.

I stayed my little home and watched the <The West Wing>, I like it, the guys speak
very quickly and drolly.

转载于:https://www.cnblogs.com/flyinsky/archive/2004/11/07/61195.html

PowerShell 7 环境已加载 (版本: 7.5.2) PowerShell 7 环境已加载 (版本: 7.5.2) PS C:\Users\Administrator\Desktop> <# >> Libuv 完整修复脚本 >> #> PS C:\Users\Administrator\Desktop> PS C:\Users\Administrator\Desktop> $ErrorActionPreference = 'Stop' PS C:\Users\Administrator\Desktop> Set-StrictMode -Version 3 PS C:\Users\Administrator\Desktop> PS C:\Users\Administrator\Desktop> try { >> $workingDir = "E:\PyTorch_Build\pytorch" >> $libuvBase = Join-Path $workingDir "third_party\libuv" >> $libDestDir = Join-Path $libuvBase "lib" >> >> # 1. 确保lib目录存在 >> New-Item -Path $libDestDir -ItemType Directory -Force -ErrorAction Stop | Out-Null >> >> # 2. 检查是否已有库文件 >> $existingLibs = Get-ChildItem -Path $libDestDir -Filter "uv*.lib" -File >> if ($existingLibs) { >> Write-Host "✅ 已找到库文件: $($existingLibs.FullName -join ', ')" -ForegroundColor Green >> $actualLibFile = $existingLibs[0].Name >> } >> else { >> Write-Host "未找到库文件,尝试从官方源下载..." -ForegroundColor Yellow >> >> # 3. 使用正确的下载URL >> $version = "1.51.0" >> $downloadUrl = "https://github.com/libuv/libuv/archive/refs/tags/v$version.zip" >> $tempZip = Join-Path $env:TEMP "libuv_source_$version.zip" >> >> # 下载源代码 >> Write-Host "正在下载Libuv源代码 (v$version)..." -ForegroundColor Cyan >> Invoke-WebRequest -Uri $downloadUrl -OutFile $tempZip -UseBasicParsing >> >> # 创建临时目录并解压 >> $tempExtract = Join-Path $env:TEMP "libuv_extract_$(Get-date -Format 'yyyyMMddHHmmss')" >> New-Item -ItemType Directory -Path $tempExtract -Force | Out-Null >> Expand-Archive -Path $tempZip -DestinationPath $tempExtract -Force >> >> # 查找并复制库文件(尝试构建目录) >> $buildDir = Join-Path $tempExtract "libuv-$version\out\build\x64-Release" >> $libFiles = Get-ChildItem -Path $buildDir -Recurse -Filter "uv*.lib" | >> Select-Object -First 1 >> >> if (-not $libFiles) { >> # 如果构建目录不存在,尝试手动构建 >> Write-Host "编译目录未找到,尝试构建Libuv..." -ForegroundColor Yellow >> $sourceDir = Join-Path $tempExtract "libuv-$version" >> $buildPath = Join-Path $sourceDir "build" >> New-Item -Path $buildPath -ItemType Directory -Force | Out-Null >> Set-Location $buildPath >> >> # 运行CMake生成构建文件 >> cmake .. -G "Visual Studio 17 2022" -A x64 >> cmake --build . --config Release >> >> $libFiles = Get-ChildItem -Path "$buildPath\Release" -Filter "uv*.lib" | >> Select-Object -First 1 >> } >> >> if ($libFiles) { >> Copy-Item -Path $libFiles.FullName -Destination $libDestDir -Force >> $actualLibFile = $libFiles.Name >> Write-Host "✅ 成功复制库文件: $actualLibFile" -ForegroundColor Green >> } >> else { >> throw "无法找到或生成库文件" >> } >> >> # 清理临时文件 >> Remove-Item $tempZip -Force -ErrorAction SilentlyContinue >> Remove-Item $tempExtract -Recurse -Force -ErrorAction SilentlyContinue >> } >> >> # 4. 更新CMake配置文件 >> $cmakeConfigPath = Join-Path $workingDir "cmake\Modules\FindLibuv.cmake" >> >> # 获取相对路径 >> $relativePath = $libuvBase.Replace($workingDir, "").TrimStart('\').Replace('\', '/') >> >> # 创建配置文件内容 >> $libuvConfig = @" >> # Libuv手动配置 >> set(LIBUV_FOUND ON) >> set(LIBUV_INCLUDE_DIRS "\${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include") >> set(LIBUV_LIBRARIES >> "\${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/lib/$actualLibFile" >> ) >> "@ >> >> # 确保目录存在 >> $cmakeDir = Split-Path $cmakeConfigPath -Parent >> New-Item -Path $cmakeDir -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null >> >> Set-Content -Path $cmakeConfigPath -Value $libuvConfig -Encoding UTF8 >> Write-Host "✅ 更新CMake配置文件: $cmakeConfigPath" -ForegroundColor Green >> >> # 5. 最终验证 >> Write-Host "`n验证安装结果:" -ForegroundColor Cyan >> >> # 检查关键文件是否存在 >> $requiredFiles = @( >> Join-Path $libuvBase "include\uv.h", >> Join-Path $libDestDir $actualLibFile, >> $cmakeConfigPath >> ) >> >> $validationResult = $requiredFiles | ForEach-Object { >> if (Test-Path $_) { >> "✅ 存在: $_" >> } >> else { >> "❌ 缺失: $_" >> } >> } >> >> $validationResult | ForEach-Object { Write-Host $_ } >> >> if ($validationResult -contains "❌") { >> throw "部分文件缺失,请检查修复过程" >> } >> else { >> Write-Host "`n✅ Libuv 安装修复完成!" -ForegroundColor Green >> } >> } >> catch { >> Write-Host "`n❌ 修复失败: $_" -ForegroundColor Red >> Write-Host "错误详细信息: $($_.Exception.Message)" -ForegroundColor Yellow >> } ✅ 已找到库文件: E:\PyTorch_Build\pytorch\third_party\libuv\lib\uv.lib ❌ 修复失败: The variable '$CMAKE_CURRENT_SOURCE_DIR' cannot be retrieved because it has not been set. 错误详细信息: The variable '$CMAKE_CURRENT_SOURCE_DIR' cannot be retrieved because it has not been set. PS C:\Users\Administrator\Desktop> "PowerShell 7 环境已加载 (版本: 7.5.2) PowerShell 7 环境已加载 (版本: 7.5.2) PS C:\Users\Administrator\Desktop> # 切换到Libuv目录 PS C:\Users\Administrator\Desktop> Set-Location "E:\PyTorch_Build\pytorch\third_party\libuv" PS E:\PyTorch_Build\pytorch\third_party\libuv> PS E:\PyTorch_Build\pytorch\third_party\libuv> # 创建构建目录 PS E:\PyTorch_Build\pytorch\third_party\libuv> New-Item -Path "build" -ItemType Directory -Force Directory: E:\PyTorch_Build\pytorch\third_party\libuv Mode LastWriteTime Length Name ---- ------------- ------ ---- da--- 2025/9/1 0:27 build PS E:\PyTorch_Build\pytorch\third_party\libuv> Set-Location "build" PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 运行CMake生成构建文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> cmake .. -G "Visual Studio 17 2022" -A x64 -- summary of build options: Install prefix: C:/Program Files/libuv Target system: Windows Compiler: C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe (MSVC) CFLAGS: /DWIN32 /D_WINDOWS -- Configuring done (0.1s) -- Generating done (0.2s) -- Build files have been written to: E:/PyTorch_Build/pytorch/third_party/libuv/build PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 构建库文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> cmake --build . --config Release 适用于 .NET Framework MSBuild 版本 17.14.19+164abd434 1>Checking Build System Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt uv.vcxproj -> E:\PyTorch_Build\pytorch\third_party\libuv\build\Release\uv.dll Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt uv_a.vcxproj -> E:\PyTorch_Build\pytorch\third_party\libuv\build\Release\libuv.lib Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt uv_run_benchmarks_a.vcxproj -> E:\PyTorch_Build\pytorch\third_party\libuv\build\Release\uv_run_benchmarks_a.exe Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt uv_run_tests.vcxproj -> E:\PyTorch_Build\pytorch\third_party\libuv\build\Release\uv_run_tests.exe Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt uv_run_tests_a.vcxproj -> E:\PyTorch_Build\pytorch\third_party\libuv\build\Release\uv_run_tests_a.exe Building Custom Rule E:/PyTorch_Build/pytorch/third_party/libuv/CMakeLists.txt PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 复制生成的库文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Copy-Item "Release\uv.lib" "..\lib\" -Force PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 更新CMake配置文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $cmakeConfigPath = "E:\PyTorch_Build\pytorch\cmake\Modules\FindLibuv.cmake" PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $newContent = @' >> set(LIBUV_FOUND ON) >> set(LIBUV_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libuv/include") >> set(LIBUV_LIBRARIES >> "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libuv/lib/uv.lib" >> ) >> '@ PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Set-Content -Path $cmakeConfigPath -Value $newContent -Encoding UTF8 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Write-Host "✅ CMake配置文件已更新" -ForegroundColor Green ✅ CMake配置文件已更新 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 最终验证脚本 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $workingDir = "E:\PyTorch_Build\pytorch" PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $libuvBase = Join-Path $workingDir "third_party\libuv" PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 验证包含文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $headerStatus = if (Test-Path "$libuvBase\include\uv.h") {"✅ 存在"} else {"❌ 缺失"} PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Write-Host "uv.h: $headerStatus" -ForegroundColor $(if ($headerStatus -eq "✅ 存在") {"Green"} else {"Red"}) uv.h: ✅ 存在 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 验证库文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $libFiles = Get-ChildItem -Path "$libuvBase\lib" -Filter "uv*.lib" -File PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $libStatus = if ($libFiles) {"✅ 找到 $($libFiles.Count) 个库文件"} else {"❌ 缺失库文件"} PropertyNotFoundException: The property 'Count' cannot be found on this object. Verify that the property exists. PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Write-Host "库文件: $libStatus" -ForegroundColor $(if ($libFiles) {"Green"} else {"Red"}) 库文件: ✅ 找到 个库文件 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> if ($libFiles) { >> Write-Host "库文件名: $($libFiles.Name)" -ForegroundColor Cyan >> } 库文件名: uv.lib PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 验证CMake配置 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $cmakeConfigPath = Join-Path $workingDir "cmake\Modules\FindLibuv.cmake" PS E:\PyTorch_Build\pytorch\third_party\libuv\build> $cmakeStatus = if (Test-Path $cmakeConfigPath) {"✅ 存在"} else {"❌ 缺失"} PS E:\PyTorch_Build\pytorch\third_party\libuv\build> Write-Host "CMake配置: $cmakeStatus" -ForegroundColor $(if ($cmakeStatus -eq "✅ 存在") {"Green"} else {"Red"}) CMake配置: ✅ 存在 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 显示配置内容 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> if (Test-Path $cmakeConfigPath) { >> Write-Host "`nCMake配置内容:" -ForegroundColor Cyan >> Get-Content $cmakeConfigPath >> } CMake配置内容: set(LIBUV_FOUND ON) set(LIBUV_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libuv/include") set(LIBUV_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libuv/lib/uv.lib" ) PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 查看可用生成器 PS E:\PyTorch_Build\pytorch\third_party\libuv\build> cmake -G CMake Error: No generator specified for -G Generators * Visual Studio 17 2022 = Generates Visual Studio 2022 project files. Use -A option to specify architecture. Visual Studio 16 2019 = Generates Visual Studio 2019 project files. Use -A option to specify architecture. Visual Studio 15 2017 = Generates Visual Studio 2017 project files. Use -A option to specify architecture. Visual Studio 14 2015 = Generates Visual Studio 2015 project files. Use -A option to specify architecture. Borland Makefiles = Generates Borland makefiles. NMake Makefiles = Generates NMake makefiles. NMake Makefiles JOM = Generates JOM makefiles. MSYS Makefiles = Generates MSYS makefiles. MinGW Makefiles = Generates a make file for use with mingw32-make. Green Hills MULTI = Generates Green Hills MULTI files (experimental, work-in-progress). Unix Makefiles = Generates standard UNIX makefiles. Ninja = Generates build.ninja files. Ninja Multi-Config = Generates build-<Config>.ninja files. Watcom WMake = Generates Watcom WMake makefiles. CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files (deprecated). CodeBlocks - NMake Makefiles = Generates CodeBlocks project files (deprecated). CodeBlocks - NMake Makefiles JOM = Generates CodeBlocks project files (deprecated). CodeBlocks - Ninja = Generates CodeBlocks project files (deprecated). CodeBlocks - Unix Makefiles = Generates CodeBlocks project files (deprecated). CodeLite - MinGW Makefiles = Generates CodeLite project files (deprecated). CodeLite - NMake Makefiles = Generates CodeLite project files (deprecated). CodeLite - Ninja = Generates CodeLite project files (deprecated). CodeLite - Unix Makefiles = Generates CodeLite project files (deprecated). Eclipse CDT4 - NMake Makefiles = Generates Eclipse CDT 4.0 project files (deprecated). Eclipse CDT4 - MinGW Makefiles = Generates Eclipse CDT 4.0 project files (deprecated). Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files (deprecated). Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files (deprecated). Kate - MinGW Makefiles = Generates Kate project files (deprecated). Kate - NMake Makefiles = Generates Kate project files (deprecated). Kate - Ninja = Generates Kate project files (deprecated). Kate - Ninja Multi-Config = Generates Kate project files (deprecated). Kate - Unix Makefiles = Generates Kate project files (deprecated). Sublime Text 2 - MinGW Makefiles = Generates Sublime Text 2 project files (deprecated). Sublime Text 2 - NMake Makefiles = Generates Sublime Text 2 project files (deprecated). Sublime Text 2 - Ninja = Generates Sublime Text 2 project files (deprecated). Sublime Text 2 - Unix Makefiles = Generates Sublime Text 2 project files (deprecated). PS E:\PyTorch_Build\pytorch\third_party\libuv\build> PS E:\PyTorch_Build\pytorch\third_party\libuv\build> # 使用正确的生成器,例如: PS E:\PyTorch_Build\pytorch\third_party\libuv\build> cmake .. -G "Visual Studio 16 2019" -A x64 CMake Error: Error: generator : Visual Studio 16 2019 Does not match the generator used previously: Visual Studio 17 2022 Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory. PS E:\PyTorch_Build\pytorch\third_party\libuv\build> "
最新发布
09-02
<think> 我们注意到在脚本中创建CMake配置文件时,使用了双引号字符串和变量扩展,其中包含`${CMAKE_CURRENT_SOURCE_DIR}`。在PowerShell中,`$`符号会被解释为变量,因此字符串中的`${CMAKE_CURRENT_SOURCE_DIR}`会被当成PowerShell变量,而该变量未定义,导致错误。 解决方案:在字符串中使用单引号来避免PowerShell变量扩展,或者使用转义字符。由于我们需要在字符串中保留`${CMAKE_CURRENT_SOURCE_DIR}`,应该使用单引号字符串,然后在需要插入PowerShell变量的地方使用双引号字符串拼接,或者使用Here-String并转义`$`。 修改方法: 将配置内容改为使用单引号括起来的Here-String,或者将`$`转义为`\$`。 这里我们选择转义`$`为`\$`,因为Here-String中无法直接包含单引号字符串(Here-String有@' ... '@和@" ... "@两种形式,分别对应不解析和解析变量)。由于我们需要在字符串中插入PowerShell变量`$relativePath`和`$actualLibFile`,所以使用双引号Here-String并转义`$`。 具体修改如下: 将: $libuvConfig = @" # Libuv手动配置 set(LIBUV_FOUND ON) set(LIBUV_INCLUDE_DIRS "\${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include") set(LIBUV_LIBRARIES "\${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/lib/$actualLibFile" ) "@ 改为: $libuvConfig = @" # Libuv手动配置 set(LIBUV_FOUND ON) set(LIBUV_INCLUDE_DIRS "`${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include") set(LIBUV_LIBRARIES "`${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/lib/$actualLibFile" ) "@ 注意:在双引号字符串中,我们使用反引号(`)来转义`$`,这样`$`就不会被PowerShell解释,而会原样输出。 另外,在之前的错误中,脚本在已有库文件的情况下执行了更新CMake配置文件的步骤,但在那里也使用了同样的字符串,所以也需要同样的修改。 因此,我们将脚本中两部分(创建新的配置文件和更新配置文件)的配置内容字符串都做上述修改。 同时,在验证步骤中,我们看到库文件已经存在,所以跳过了下载和构建,但在更新配置文件时发生了错误。现在修复这个字符串问题。 修改后的脚本部分如下: 在创建新配置文件和更新配置文件的部分,使用转义后的字符串。 此外,在验证步骤中,我们注意到在验证库文件时,使用了`$libFiles.Count`,但是当`$libFiles`为`$null`时,会报错“找不到属性Count”。因此,在验证脚本中,我们应确保当没有库文件时,不访问Count属性。 修改验证脚本部分: $libStatus = if ($libFiles) {"✅ 找到 $($libFiles.Count) 个库文件"} else {"❌ 缺失库文件"} 但是,如果`$libFiles`是一个对象数组,那么`$libFiles.Count`是有效的;如果`$libFiles`是单个对象,则没有Count属性。因此,我们可以使用`@($libFiles).Count`来确保得到一个数组然后计数。 或者,我们可以这样写: $libStatus = if ($libFiles) {"✅ 找到 $(@($libFiles).Count) 个库文件"} else {"❌ 缺失库文件"} 但为了简洁,我们也可以直接判断是否存在,不一定需要数量。 不过,在修复脚本中,我们只复制了一个文件,所以在验证时,我们只需要检查是否存在即可。 我们修改验证脚本中的输出,只输出是否找到,不输出数量,或者确保使用数组计数。 但在修复脚本的验证部分,我们只检查了指定的`$actualLibFile`文件是否存在,所以不会有问题。 因此,我们主要修复CMake配置文件内容中的转义问题。 下面是修改后的完整脚本(只修改了配置内容字符串和验证库文件输出的部分): </think> 从您的操作记录中,我发现了几个关键问题需要解决: ### 问题分析 1. **CMake配置错误**:`$CMAKE_CURRENT_SOURCE_DIR` 变量未定义(PowerShell变量 vs CMake变量混淆) 2. **库文件验证错误**:`$libFiles.Count` 属性访问失败(当只有一个文件时) 3. **生成器冲突**:CMake缓存导致生成器切换失败 以下是完整的修复方案: ### 修复脚本(解决所有问题) ```powershell <# Libuv 终极修复脚本 #> $ErrorActionPreference = 'Stop' Set-StrictMode -Version 3 try { $workingDir = "E:\PyTorch_Build\pytorch" $libuvBase = Join-Path $workingDir "third_party\libuv" $libDestDir = Join-Path $libuvBase "lib" # 1. 确保lib目录存在 New-Item -Path $libDestDir -ItemType Directory -Force -ErrorAction Stop | Out-Null # 2. 检查是否已有库文件 $existingLibs = Get-ChildItem -Path $libDestDir -Filter "uv*.lib" -File if ($existingLibs) { Write-Host "✅ 已找到库文件: $($existingLibs.FullName)" -ForegroundColor Green $actualLibFile = $existingLibs[0].Name } else { # 构建逻辑保持不变... } # 3. 修复CMake配置(使用正确的变量语法) $cmakeConfigPath = Join-Path $workingDir "cmake\Modules\FindLibuv.cmake" $relativePath = $libuvBase.Replace($workingDir, "").TrimStart('\').Replace('\', '/') $libuvConfig = @" # Libuv手动配置 set(LIBUV_FOUND ON) set(LIBUV_INCLUDE_DIRS "`${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include") set(LIBUV_LIBRARIES "`${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/lib/$actualLibFile" ) "@ # 确保目录存在 $cmakeDir = Split-Path $cmakeConfigPath -Parent New-Item -Path $cmakeDir -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null Set-Content -Path $cmakeConfigPath -Value $libuvConfig -Encoding UTF8 Write-Host "✅ 更新CMake配置文件: $cmakeConfigPath" -ForegroundColor Green # 4. 修复验证逻辑 Write-Host "`n验证安装结果:" -ForegroundColor Cyan $requiredFiles = @( Join-Path $libuvBase "include\uv.h", Join-Path $libDestDir $actualLibFile, $cmakeConfigPath ) $allExists = $true foreach ($file in $requiredFiles) { if (Test-Path $file) { Write-Host "✅ 存在: $file" -ForegroundColor Green } else { Write-Host "❌ 缺失: $file" -ForegroundColor Red $allExists = $false } } if (-not $allExists) { throw "部分文件缺失,请检查修复过程" } Write-Host "`n✅ Libuv 安装修复完成!" -ForegroundColor Green } catch { Write-Host "`n❌ 修复失败: $_" -ForegroundColor Red Write-Host "错误详细信息: $($_.Exception.Message)" -ForegroundColor Yellow } ``` ### 关键修复点解释 1. **CMake变量语法修复**: ```powershell # 错误语法(导致变量未定义) "\${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include" # 正确语法(使用反引号转义) "`${CMAKE_CURRENT_SOURCE_DIR}/$relativePath/include" ``` 在PowerShell中,`${}`是特殊语法,需要使用反引号(`)转义美元符号($) 2. **库文件验证修复**: ```powershell # 错误方式(Count属性访问失败) $libStatus = if ($libFiles) {"✅ 找到 $($libFiles.Count) 个库文件"} # 正确方式(处理单文件情况) if ($libFiles) { $count = @($libFiles).Count # 确保转换为数组 "✅ 找到 $count 个库文件" } ``` 3. **CMake生成器冲突解决**: ```powershell # 清除CMake缓存解决冲突 Remove-Item CMakeCache.txt -Force -ErrorAction SilentlyContinue Remove-Item CMakeFiles -Recurse -Force -ErrorAction SilentlyContinue ``` ### 补充工具函数(添加到脚本开头) ```powershell function Get-LibuvFiles { param( [string]$Path ) try { $files = Get-ChildItem -Path $Path -Recurse -Filter "uv*.lib" -File -ErrorAction Stop if ($files) { return $files } return $null } catch { return $null } } function Test-RequiredFiles { param( [array]$Files ) $results = @() foreach ($file in $Files) { $exists = Test-Path $file $results += [PSCustomObject]@{ File = $file Exists = $exists } } return $results } ``` ### 完整的CMake构建助手函数 ```powershell function Build-Libuv { param( [string]$SourcePath, [string]$Generator = "Visual Studio 17 2022", [string]$Architecture = "x64", [string]$Config = "Release" ) try { $buildPath = Join-Path $SourcePath "build" New-Item -Path $buildPath -ItemType Directory -Force | Out-Null Set-Location $buildPath # 清除旧缓存 Remove-Item CMakeCache.txt -Force -ErrorAction SilentlyContinue Remove-Item CMakeFiles -Recurse -Force -ErrorAction SilentlyContinue # 生成构建文件 cmake .. -G $Generator -A $Architecture # 构建项目 cmake --build . --config $Config return $true } catch { Write-Host "构建失败: $_" -ForegroundColor Red return $false } } ``` ### 使用示例 ```powershell # 使用助手函数构建Libuv $sourceDir = "E:\PyTorch_Build\pytorch\third_party\libuv" if (Build-Libuv -SourcePath $sourceDir) { # 复制生成的库文件 $libFile = Get-ChildItem -Path "$sourceDir\build\Release" -Filter "uv*.lib" Copy-Item -Path $libFile.FullName -Destination "$sourceDir\lib\" -Force } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值