泊坞窗构建失败:无法设置环境变量

时间:2018-10-11 14:22:08

标签: c++ qt docker visual-c++ qt5

我正在尝试使用docker构建QT应用程序。我有Visual Studio 2015构建工具和QT 5.11.2作为基本Docker映像。当我尝试通过docker构建QT应用程序时,出现此错误。

  

C:\ Qt \ 5.11.2 \ msvc2015_64 \ include \ QtCore / qglobal.h(45):致命错误   C1083:无法打开包含文件:'type_traits':没有此类文件或   目录

当我检查此文件'type_traits'时,在docker内部,它存在于以下路径中:

  

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ include

泊坞窗构建在此步骤失败:

RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe

此命令RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"]设置环境变量,如何验证dockerfile中其余RUN命令是否仍然存在这些环境变量?

以下是我的docker文件:

#My base docker image containing QT5.11.2 and Visual build tools 2015    
FROM qt 

COPY ["./", "C:/app"]

RUN $env:PATH ='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin;' + $env:PATH;\
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Qt\5.11.2\msvc2015_64\bin;' + $env:PATH;\
   [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Qt\Tools\QtCreator\bin\jom.exe;' + $env:PATH;\
   [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;' + $env:PATH;\
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

WORKDIR C:\\app
RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"]

RUN qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"  
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all 
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe    
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install
RUN mkdir dist\debug_build\app_dist  
RUN xcopy app_dist\dist_redist\*.* dist\debug_build\app_dist /E /Y >NUL

CMD cmd

1 个答案:

答案 0 :(得分:1)

  

如何验证dockerfile中其余RUN命令的这些内容仍然存在?

他们不会。

此处

存在的环境中
RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"]

执行一个使用参数x86_amd64执行批处理文件的进程,从而创建新的环境 任何 child 进程的设置-没有设置-然后退出。然后:

RUN qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"

在环境存在的环境中执行另一个过程,该过程仍然存在 环境。依此类推。

关于此行为,没有针对Docker或Windows的特定说明。在任何操作中 系统,一个进程不能修改其父级的环境,只能修改 它继承并传递给任何子进程的环境。

如果需要所有命令:

qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install

要在由vcvarsall.bat x86_amd64修改的环境中开始,那么您 已在该命令的同一外壳中运行所有命令,例如

RUN "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" x86_amd64 && ^
    qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"  && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install

另请参阅dockerfile ENV command 一种在Docker容器中进行全局环境设置的方法。