我正在尝试使用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
答案 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容器中进行全局环境设置的方法。