我有一个基于CMake的C ++项目,我需要将其集成到CI / CD管道中。管道有两个步骤,一个用于构建,另一个用于测试。在Docker容器中创建此环境的工作方式类似于charm,但会生成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上寻找一个中小企业来教育我这是如何运作的。
答案 0 :(得分:0)
好吧,我在容器中绑定了ctest并发现它正在搜索每个具有测试可执行文件的目录中的CTestTestfile.cmake文件。将该文件与可执行文件一起添加到部署容器中,基本上是在构建容器中找到该文件的位置,解决了问题。
在构建树的根目录下有一个CTestTestfile.cmake,然后在测试可执行文件旁边有单独的CTestTestfile.cmake文件。
strace是你的朋友,虽然我必须学习码头工人的新技巧,因为strace是特权。这是我用来判断ctest的命令
docker run --rm --security-opt seccomp:unconfined strace ctest -N