首页 > 解决方案 > 如何让 cmake 只为 docker 构建可执行文件?

问题描述

如果我构建一个 cmake 文件,使用 make 创建一个可执行文件并删除除可执行文件之外的所有内容,则可执行文件仍然有效。我可以吗,

  1. 构建文件,但唯一的输出是可以使用 ./project 执行的文件

或者

  1. 构建所有文件,使用 make 创建可执行文件,然后删除除可执行文件之外的所有内容

如果是这样,我该怎么做?

标签: dockercmake

解决方案


如果我理解正确,您想要创建一个独立的二进制文件,即使 docker 映像没有任何依赖项也无法执行,那么您需要在构建期间使用静态选项 -我不是这方面的专家- 也许是在使用 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 

推荐阅读