你为什么需要那个?
你可以加 install() 命令你的 CMakeLists.txt 然后打电话 make install 将您的可执行文件复制到 CMAKE_INSTALL_PREFIX 目录。如果你设置 CMAKE_INSTALL_PREFIX 在空目录中,您将以仅包含可执行文件的目录结束。
install()
CMakeLists.txt
make install
CMAKE_INSTALL_PREFIX
如果我正确地得到这个,你想要创建一个独立的二进制文件,即使docker镜像没有任何依赖关系也无法执行,那么你需要在构建期间使用静态选项 - 我不是这方面的专家 - 也许如下面的答案所述 使用CMake编译静态可执行文件 。
接下来你可以用一个 多阶段构建 在docker中,这将使您能够使用可执行文件获得最终的最小图像,而不需要任何构建依赖项,只需要运行时环境所需的软件包。我有一个例子没有 make ,它是使用创建的 g++ 但实现了类似的概念如下:
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