Sto scrivendo uno script PowerShell per configurare un ambiente di costruzione e poi effettuare la compilazione. Ciò comporta l'impostazione del percorso di sistema in modo che includa il compilatore e il sistema di compilazione (in questo caso, qmake e mingw32-make) e quindi procedendo con la compilazione.
Ho impostato le cose in modo che la funzione per modificare il percorso del sistema, in linea generale questo riferimento , è in un file separato come questo:
Function AddTo-UserPath
{
Param
(
[Parameter(mandatory=$true)]
[System.IO.DirectoryInfo[]]$PathsToAdd
)
$MachinePath = [System.Environment]::GetEnvironmentVariable('PATH','Machine')
$UserPath = [System.Environment]::GetEnvironmentVariable('PATH','User')
$VerifiedPathsToAdd = $Null
$MachinePathArray = $MachinePath -Split ‘;’ -replace ‘\\+$'
$UserPathArray = $UserPath -Split ‘;’ -replace ‘\\+$'
Foreach ($PathToAdd in ($PathsToAdd | % { $_.FullName.TrimEnd(‘\’) } ) )
{
if($MachinePathArray -contains $PathToAdd)
{
Write-Verbose “$PathToAdd already exists in Machine Path”
}
elseif($UserPathArray -contains $PathToAdd)
{
Write-Verbose “$PathToAdd already exists in User Path”
}
else
{
$VerifiedPathsToAdd += ";$PathToAdd"
}
}
if($VerifiedPathsToAdd -ne $null)
{
[Environment]::SetEnvironmentVariable('PATH', $UserPath + $VerifiedPathsToAdd, 'User')
}
}
... così che nel mio file di script principale posso scrivere:
# Load the module containing the AddTo-UserPath function
Import-Module $PSScriptRoot\..\ps1utils\myfunctions.ps1
# Add the required directories to the system path
AddTo-UserPath C:\Qt\Tools\mingw530_32\bin, C:\Qt\5.9.7\mingw53_32\bin
# Start the build
qmake qwt.pro
mingw32-make -j
mingw32-make -j install
Se eseguo il mio script dal Powershell ISE, posso inserire un punto di interruzione nella riga 'qmake' e verificare dalla GUI di Windows che il mio percorso sia stato modificato come richiesto; Posso persino aprire una finestra separata di cmd ed eseguire qmake e mingw32-make abbastanza felicemente. La mia sceneggiatura, tuttavia, mi dà gli errori:
qmake : The term 'qmake' is not recognized as the name of a cmdlet, function, script file, or operable program.
mingw32-make : The term 'mingw32-make' is not recognized as the name of a cmdlet, function, script file, or operable program.
... e se controllo il valore di $ env: Path allora abbastanza sicuro che non riflette le modifiche che ho appena fatto.
In un certo senso, questo non è sorprendente; Ho letto molte volte che se si modifica il percorso del sistema da una finestra di PowerShell, è necessario chiudere e riaprire la finestra affinché la modifica abbia effetto. Il problema è che non riesco a capire come aggirarlo dal mio script - l'intero punto di questo è automatizzare il mio processo di compilazione, quindi non è proprio appropriato per me dover chiudere manualmente una finestra di Powershell e aprirla un altro prima che il mio script possa procedere. Ci deve essere un modo migliore.
Una cosa che mi è venuta in mente è che forse avevo bisogno di generare un nuovo processo, quindi ho provato a mettere i miei comandi di compilazione in un file di script separato e scrivere:
AddTo-UserPath C:\Qt\Tools\mingw530_32\bin, C:\Qt\5.9.7\mingw53_32\bin
powershell -file TheRestOfMyBuildProcess.ps1
... ma non ha funzionato.
Quindi ora sono fuori di idee, non sono stato in grado di trovare una soluzione online e mi piacerebbe sapere qual è il modo corretto per farlo.