如果我生成一个cmake文件,请使用make创建一个executeble并删除可执行文件以外的所有内容,该可执行文件仍然可以使用。我可以吗,
或
如果是的话,我该怎么办?
答案 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
设置为空目录,则将以仅包含可执行文件的目录结尾。