#encoding:utf8 $cur_dir = Split-Path $MyInvocation.MyCommand.Path $dir_main = "$cur_dir/../" $dir_erl = $dir_main $dir_log = "$dir_erl/logs" $werl = "werl" $erl = "erl" $param_pa = "-pa " + $($dir_erl -replace "\\", "/") + "/ebin" function fun_make(){ $src = $dir_main + "/src" $inc = $dir_main + "/include" $timefile = $cur_dir + "/timefile" #$beamfile = $dir_main + "/ebin" $lastTime = $(Get-Item $timefile).LastWriteTime #$beamTime = $(Get-Item $beamfile).LastWriteTime #$measureObject = $lastTime, $beamTime | Measure-Object -Maximum #$latestTime = $measureObject.Maximum $latestTime = $lastTime function get_hrl_str(){ begin{ $list = @() } process{ $list += $_.Name } end{ $str = $list -join "|" if($str -ne ""){ $str = "($str)" } $str } } $chhrl_str = Get-ChildItem $inc -Include *.hrl -Recurse | Where-Object {$_.LastWriteTime -gt $latestTime} | get_hrl_str ## 使用管道获取变化的文件 ## 1. 获取所有文件 ## 2. 检测变化文件 ## 3. 生成文件全名列表 function get_erl_str(){ begin{ $list = @() } process{ $f = $_.FullName -replace "\\", "/" $list += "`\`"$f`\`"" } end{ $list -join "," } } $erl_str = Get-ChildItem $src -Include *.erl -Exclude .svn,.git -Recurse | Where-Object { if ( $(Get-Item $_.FullName).LastWriteTime -gt $latestTime ){ return $_ } if($chhrl_str -eq ""){ return $false } if (Select-String -Path $_.FullName -Pattern $chhrl_str -Quiet) { return $_ }else{ return $false } } | get_erl_str Set-Location $dir_erl ## 在windows下 ## 直接mmake:files(5, [])无效 ## 必须mmake:files(5, [], Opts) ## why? {{ok,[{{_, Opts}}|_]}} $cmd_str = '{0} {1} -noshell -eval "{{ok,FileInfo}}=file:consult(\"./Emakefile\"),{{_, Opts}}=lists:last(FileInfo),case mmake:files(5,[{2}], Opts) of up_to_date -> init:stop(); _ -> init:stop(1) end"' $cmd = $cmd_str -f $erl, $param_pa, $erl_str ## echo $cmd cmd /C $cmd if ($?) { Write-Output "=============> success" (Get-Date).ToString() | Out-File $timefile -Append }else{ Write-Error "==============> fail" } Set-Location $cur_dir } fun_make