Windows 在azure管道中使用cmake中的bash尝试调用WSL,但从管道代码调用不会

Windows 在azure管道中使用cmake中的bash尝试调用WSL,但从管道代码调用不会,windows,cmake,azure-devops,azure-pipelines,Windows,Cmake,Azure Devops,Azure Pipelines,我的CMakeLists.txt文件中有一个execute\u进程(COMMAND bash script.sh)任务,该任务使用以下管道任务构建在azure管道上: - bash: | cmake . 最近,这已停止工作,并抛出错误“Windows Subsystem for Linux没有安装的发行版” 如果我在myazure pipelines.yaml中使用以下yaml运行该命令,它工作正常,不会引发任何错误 - bash: ./script.sh 为什么从cmake

我的CMakeLists.txt文件中有一个
execute\u进程(COMMAND bash script.sh)
任务,该任务使用以下管道任务构建在azure管道上:

- bash: |
    cmake .
最近,这已停止工作,并抛出错误“Windows Subsystem for Linux没有安装的发行版”

如果我在my
azure pipelines.yaml中使用以下yaml运行该命令,它工作正常,不会引发任何错误

- bash:
    ./script.sh
为什么从cmake调用同一个脚本会尝试调用WSL?我如何阻止这种情况发生,使它只运行脚本


同样的脚本在linux和mac管道阶段都运行良好,因此我希望它与windows保持一致。

我可以重现完全相同的问题。我发现这个命令
execute\u进程(command powershell bash script.sh)
可以在windows代理上运行

如果要使其与windows保持一致。您可以在CMakeLists.txt文件中添加以下附加行。此附加行仅适用于windows

execute_process(COMMAND bash script.sh)
execute_process(COMMAND powershell bash script.sh) #works on windows

我在这个问题上使用的解决方法是使用相同的命令创建一个windows批处理文件,然后在从windows运行cmake时调用它

if(MSVC)
    execute_process ( COMMAND script.bat)
else()
    execute_process ( COMMAND bash script.sh)
endif()
azure管道任务随后正常工作:

- bash: |
    cmake .

问题是它破坏了cmake脚本的交叉兼容性(在mac/linux上不存在powershell)。我的解决方法是制作一个
.bat
脚本并执行它。@ChrisBamford使用.bat脚本确实是一个更好的解决方法。你能分享你的解决方案并接受它作为答案吗?