Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure管道没有';即使已安装指定的编译器,也不要使用它 我们有一个Azure流水线,它有一个微软托管代理,为Linux、Mac和Windows构建C++项目。因为我们使用std::filesystem库,所以我们需要指定更高的GNU版本,以使其在Mac和Linux上工作。问题是,虽然Linux可以在Mac上运行,但它仍然在使用GNU7.5。我们怎样才能强迫Linux像Mac一样使用GNU9.3呢_C++_Gcc_Azure Devops_Azure Pipelines - Fatal编程技术网

Azure管道没有';即使已安装指定的编译器,也不要使用它 我们有一个Azure流水线,它有一个微软托管代理,为Linux、Mac和Windows构建C++项目。因为我们使用std::filesystem库,所以我们需要指定更高的GNU版本,以使其在Mac和Linux上工作。问题是,虽然Linux可以在Mac上运行,但它仍然在使用GNU7.5。我们怎样才能强迫Linux像Mac一样使用GNU9.3呢

Azure管道没有';即使已安装指定的编译器,也不要使用它 我们有一个Azure流水线,它有一个微软托管代理,为Linux、Mac和Windows构建C++项目。因为我们使用std::filesystem库,所以我们需要指定更高的GNU版本,以使其在Mac和Linux上工作。问题是,虽然Linux可以在Mac上运行,但它仍然在使用GNU7.5。我们怎样才能强迫Linux像Mac一样使用GNU9.3呢,c++,gcc,azure-devops,azure-pipelines,C++,Gcc,Azure Devops,Azure Pipelines,我们通过在.yaml中设置以下变量来强制编译器版本: 变量: 抄送:gcc-9.3 CXX:g++-9.3 CXXFLAGS:-lstdc++fs 对于我们的VMImage,我们使用[platform]-最新, 这意味着Linux和Mac都应该按照规定安装GNU9.3 这是我们完整的azure.pipeline.yaml 触发器: -主人 战略: 矩阵: linux: imageName:'ubuntu最新版本' 雨衣: imageName:“macOS最新版本” 窗户: imageName:

我们通过在.yaml中设置以下变量来强制编译器版本:

变量:
抄送:gcc-9.3
CXX:g++-9.3
CXXFLAGS:-lstdc++fs
对于我们的VMImage,我们使用[platform]-最新, 这意味着Linux和Mac都应该按照规定安装GNU9.3

这是我们完整的azure.pipeline.yaml

触发器:
-主人
战略:
矩阵:
linux:
imageName:'ubuntu最新版本'
雨衣:
imageName:“macOS最新版本”
窗户:
imageName:“windows最新版本”
游泳池:
vmImage:$(imageName)
变量:
抄送:gcc-9.3
CXX:g++-9.3
CXXFLAGS:-lstdc++fs
步骤:
-任务:CmdLine@2
displayName:“清除生成文件夹”
投入:
脚本:“rm-rf构建”
-任务:CmdLine@2
displayName:“创建生成文件夹”
投入:
脚本:“mkdir构建”
-任务:CmdLine@2
displayName:“设置vcpkg子模块”
投入:
脚本:“git子模块init”
-任务:CmdLine@2
displayName:“下载vcpkg子模块”
投入:
脚本:“git子模块更新”
-任务:Bash@3
displayName:“安装vcpkg”
投入:
targetType:“内联”
脚本:“sh bootstrap vcpgg.sh”
工作目录:“extern/vcpkg”
-任务:CMake@1
条件:ne(变量['Agent.OS'],'Windows\u NT')
投入:
cmakeArgs:“…”
工作目录:“生成”
-任务:CMake@1
条件:eq(变量['Agent.OS'],'Windows\u NT')
投入:
cmakeArgs:“-DCMAKE_发电机_平台=x64'
工作目录:“生成”
-任务:CMake@1
displayName:“CMake生成”
投入:
cmakeArgs:“--生成”
工作目录:'$(Build.SourcesDirectory)'
-任务:CmdLine@2
displayName:“运行测试”
条件:ne(变量['Agent.OS'],'Windows\u NT')
投入:
脚本:“ctest--无压缩输出-T测试”
工作目录:“生成”
-任务:CmdLine@2
条件:eq(变量['Agent.OS'],'Windows\u NT')
displayName:“运行测试”
投入:
脚本:“ctest-C调试--无压缩输出-T测试”
工作目录:“生成”
-任务:PublishTestResults@2
投入:
testResultsFormat:'CTest'
testResultsFiles:“**/Test*.xml”

'ubuntu-latest'
中,没有安装GNU9.3。因此,在将GNU版本指定为9.3之后,Linux仍然使用GNU7.5

要解决此问题,您可以将linux的
imageName
'ubuntu-latest'
更改为
'ubuntu-20.04'

然后您可以使用GNU9.3

以下是测试的YAML文件及其构建日志

pool:
  vmImage: 'Ubuntu-20.04'
  variables:
    CC: gcc-9.3
    CXX: g++-9.3
 
steps:
- task: CmdLine@2
  inputs:
    script: |
      gcc –version

您是否尝试添加
-DCMAKE\u CXX\u COMPILER=g++-9.3
?有时候,当涉及到环境变量时,CMake是一个不可靠的工具。我建议您指定一个用于指定已安装编译器版本的映像,或者在构建管道期间安装编译器。虽然我通常在docker容器中构建,以消除所有环境差异。另外,我认为除非您是在本地托管代理上构建,否则您没有清理构建文件夹的能力。@Mansoor这不是我在这里要做的吗?我将编译器设置为ImageManager的一个变量。您是否检查了编译器在这些VM映像上是否实际可用?您可以添加一个步骤以在路径上输出gcc的版本?通常只安装1个版本。如果是这样的话,那么像@Firefly建议的一些应该会让它适合你。从长远来看,为了避免由于环境变化而破坏任何构建,最好指定一个特定版本的映像或安装依赖项。这样做很有效,但奇怪的是,对于ubuntu最新版本,它应该按照此处的规定安装: