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

时间:2019-03-17 07:22:19

标签: docker cmake

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

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

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

如果是的话,我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果我正确地做到了这一点,那么您想创建一个独立的二进制文件,即使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 

答案 1 :(得分:0)

您为什么需要它?

您可以在install()中添加CMakeLists.txt命令,然后调用make install将可执行文件复制到CMAKE_INSTALL_PREFIX目录中。如果将CMAKE_INSTALL_PREFIX设置为空目录,则将以仅包含可执行文件的目录结尾。