Вызов cmake из пакетного скрипта (внутри докера) - PullRequest
0 голосов
/ 16 января 2019

Я хочу вызвать cmake из файла Docker

Мне удалось заставить команду работать, когда я делаю это вручную, но хочу автоматизировать ее с помощью скрипта.

На данный момент я звоню

"cmd C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvarsall.bat" x64 8.1

, который дает мне терминал cmd с 64-битным msbuild в пути.

Тогда я могу позвонить cmake

cmake -G "Visual Studio 15 2017 Win64" .

Проблема в том, что мне нужно подключиться к контейнеру и запустить эти команды вручную.

Я хотел бы иметь возможность сделать что-то вроде

RUN call vcvarsall.bat" x64 8.1 | cmake -G "Visual Studio 15 2017 Win64" .

в dockerfile

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

Если я хорошо понял вашу проблему, вы хотите скомпилировать программу во время процедуры сборки вашего 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 и т. Д.)

0 голосов
/ 16 января 2019

Если вы хотите, чтобы скрипт выполнялся, когда ваш контейнер работает (не собирается), вы должны поместить его в директивы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...