docker - 如何使cmake仅为docker构建可执行文件?

标签 docker cmake

如果我生成一个cmake文件,请使用make创建一个executeble并删除可执行文件以外的所有内容,该可执行文件仍然可以使用。我可以吗,

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

    要么
  • 具有所有文件的生成,使用make创建可执行文件,然后删除可执行文件以外的所有内容

  • 如果是这样,我该怎么办?

    最佳答案

    如果我正确地做到了这一点,那么您想创建一个即使docker镜像没有任何依赖关系也无法执行的独立二进制文件,那么您需要在构建过程中使用static选项-我对此不是专家-也许在Compiling a static executable with CMake的以下答案中进行了介绍。

    接下来,您可以在docker中使用multi-stage builds,这将使您能够在没有可执行文件依赖的情况下获得带有可执行文件的最终最小镜像,而不仅仅是运行时环境所需的软件包。我有一个不使用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 
    

    关于docker - 如何使cmake仅为docker构建可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204756/

    相关文章:

    c++ - 带有 Xcode 生成器的特定于配置的 add_custom_command

    opencv - 在 Mac OS X Lion : symbol(s) not found for architecture x86_64 中链接 OpenCV 2.3 程序

    c++ - 错误 : magic. h : No such file or directory (MacOS X V 10. 6.8)

    c++ - 如何使用 GTK+ 设置 CMakeLists?

    node.js - 当后端位于 Docker 容器中时,SvelteKit SSR fetch()

    docker - Nvidia/cuda-runntime docker 镜像中的 micromamba 安装不起作用

    docker - docker swarm over kubernetes有什么限制?

    jenkins - Docker- Jenkins 图像

    cmake - 如何在重新安装期间使用 CPack NSIS 显示卸载程序窗口?

    docker - 如何为 TFS 上的 dockerized F# Expecto 测试配置 CI