Как сделать так, чтобы cmake собирал только исполняемый файл для докера? - PullRequest
0 голосов
/ 17 марта 2019

Если я создаю файл cmake, создаю исполняемый файл с make и удаляю все, кроме исполняемого, исполняемый файл все еще функционирует.Могу ли я,

  1. построить файл, но единственный выходной файл - это файл, который можно выполнить с помощью ./project

или

собрать все файлы, создать исполняемый файл с помощью make, затем удалить все, кроме исполняемого файла

и, если да, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Если я получаю это правильно, вы хотите создать отдельный двоичный файл, который не может быть выполнен, даже если образ докера не имеет каких-либо зависимостей, тогда вам нужно использовать статическую опцию во время сборки - я неэксперт в этом - возможно, как описано в следующем ответе Компиляция статического исполняемого файла с помощью CMake .

Далее вы можете использовать многоэтапные сборки вDocker, который позволит вам иметь окончательный минимальный образ с вашим исполняемым файлом только без каких-либо зависимостей сборки, только необходимые пакеты для вашей среды выполнения.У меня есть пример не с make, он был создан с использованием g++, но с использованием аналогичной концепции, как показано ниже:

FROM gcc:5 as builder
COPY ./hello_world_example.cc /hello_world_example.cc
RUN g++ -o hello_world_binary -static hello_world_example.cc && chmod +x hello_world_binary

FROM debian:jessie
COPY --from=builder /hello_world_binary /hello_world_binary
CMD ["/hello_world_binary"]

И конечный результат при запуске контейнера:

$ docker run --rm -it helloworldimage:latest
Hello from Dockerized image 
0 голосов
/ 17 марта 2019

Зачем вам это нужно?

Вы можете добавить команду install() в CMakeLists.txt и затем вызвать make install, чтобы скопировать ваш исполняемый файл в каталог CMAKE_INSTALL_PREFIX.Если вы установите CMAKE_INSTALL_PREFIX в пустой каталог, вы получите каталог, содержащий только ваш исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...