迁移 CMake 会导致多阶段 Docker 构建

migrating CMake results in multi-stage Docker build

本文关键字:Docker 构建 CMake 迁移      更新时间:2023-10-16

我有一个基于 CMake 的C++项目,我需要将其集成到 CI/CD 管道中。管道有两个步骤,一个用于构建,另一个用于测试。在 Docker 容器中创建此环境的工作方式类似于一个超级按钮,但会产生一个 2GB 的容器。所以我正在尝试实现一个多阶段的 Docker 构建,我将可执行文件复制到 Alpine 基础映像中。所有这些都有效,除了cmake/ctest功能。我想公开命令"make test",它将执行 CMake 生成目标。

这是CMake为运行ctest创建的目标。

# Targets provided globally by CMake.
# Special rule for the target test
test:
        @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
        /usr/bin/ctest --force-new-ctest-process $(ARGS)
.PHONY : test

我无法弄清楚的问题是 ctest 从哪里获取测试配置。当我发出时

ctest -N

在容器中,它不显示任何测试。

在CMake上寻找中小企业来教育我这应该如何工作。

好的,我在容器中跟踪了 ctest,发现它正在每个具有测试可执行文件的目录中查找 CTestTestfile.cmake 文件。 将该文件与可执行文件一起添加到部署容器中,基本上是在生成容器中找到该文件的位置,可以解决问题。

在构建树的根目录下有一个CTestTestfile.cmake,然后在测试可执行文件旁边有一个单独的CTestTestfile.cmake文件。

strace 是你的朋友,尽管我不得不学习 docker 的新技巧,因为 strace 是特权。这是我用来跟踪 ctest 的命令

docker run --rm --security-opt seccomp:unlimited strace ctest -n