我想从docker文件中调用cmake
当我手动执行该命令时,我已经设法使其正常运行,但是希望使用脚本将其自动化。
此刻我打电话给
"cmd C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvarsall.bat" x64 8.1
这给了我一个在路径上带有64位msbuild的cmd终端。
然后我可以打电话给cmake
cmake -G "Visual Studio 15 2017 Win64" .
问题是,我必须连接到容器并手动运行这些命令。
我希望能够做类似的事情
RUN call vcvarsall.bat" x64 8.1 | cmake -G "Visual Studio 15 2017 Win64" .
在dockerfile
答案 0 :(得分:1)
如果要在容器运行(而不是构建)时执行脚本,则必须将其放入ENTRYPOINT
或CMD
指令中。但是,如果您有更好的管道传输方法,请将其全部放入单个bat
文件中,然后从Dockerfile调用该文件
entrypoint.bat
call vcvarsall.bat x64 8.1 | cmake -G "Visual Studio 15 2017 Win64" .
Dockerfile
FROM foo
WORKDIR d:/work
# copy bat file into container
COPY entrypoint.bat d:/work/entrypoint.bat
ENTRYPOINT ["d:/work/entrypoint.bat"]
因此,在构建图像后,只需不使用任何参数即可运行它
docker build -t my-image .
docker run my-image # ENTRYPOINT gets executed here
答案 1 :(得分:0)
如果我很了解您的问题,那么您想在Dockerfile的构建过程中编译一个程序。确实, vcvarsall.bat 必须在使用MSVC编译器的任何命令之前执行。
我花了一些时间弄清楚什么是正确的语法,但这是我针对MSVC2015的解决方法:
SHELL ["\"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\"", "amd64", "&&"]
RUN set
您将看到vcvarsall.bat设置的所有变量都将显示(例如: VCINSTALLDIR , WindowsLibPath 等)