docker - 如何让 cmake 只为 docker 构建可执行文件?
问题描述
如果我构建一个 cmake 文件,使用 make 创建一个可执行文件并删除除可执行文件之外的所有内容,则可执行文件仍然有效。我可以吗,
- 构建文件,但唯一的输出是可以使用 ./project 执行的文件
或者
- 构建所有文件,使用 make 创建可执行文件,然后删除除可执行文件之外的所有内容
如果是这样,我该怎么做?
解决方案
如果我理解正确,您想要创建一个独立的二进制文件,即使 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
推荐阅读
- java - 如何在 intellij 中修复此 NoClassDefFoundError?
- android - Xamarin.Android APK 部署失败 - INSTALL_FAILED_INVALID_APK base.apk 代码丢失
- google-assistant-sdk - 谷歌行动没有收到 T 恤邮件直到现在
- python - 我怎么能只检索 csv 文件的前 20 项?
- alert - 未捕获的引用错误;未在 VM340 Index.js 中定义;1
- javascript - React-Redux - 解析错误:不能在异步函数之外使用关键字'await'
- sql - 引入第三个表作为左连接重复值
- mysql - mysql中的重复数据删除
- reactjs - 打字稿在css中将字符串值分配给颜色
- python - Django AllAuth 和 Django Crispy 表单