0

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

这是 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 上寻找 SME 来教育我这应该如何工作。

4

1 回答 1

0

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

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

strace 是你的朋友,虽然我必须学习 docker 的新技巧,因为 strace 是特权。这是我用来 strace ctest 的命令

docker run --rm --security-opt seccomp:unconfined strace ctest -N

于 2018-04-19T21:49:07.793 回答