CTEST:如何在全球设置Working_Directory?

发布于 2025-01-31 08:34:35 字数 1764 浏览 3 评论 0原文

最近,我一直在使用CTEST建立一个简单的测试套件。以最简单的形式看起来像这样:

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

add_test(NAME test_0
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-0)

add_test(NAME test_1
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-1)

add_test(NAME test_2
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-2)

但是,随着它的成长,我很快就厌倦了必须在每个测试中重复works_directory $ {cmake_current_source_dir}

问题:有没有办法设置working_directory全球(或者,在每个测试子目录中局部更好)? 到目前为止,最接近解决方案的东西

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

add_test(NAME test_0
  COMMAND script.sh arg-0)

add_test(NAME test_1
  COMMAND script.sh arg-1)

add_test(NAME test_2
  COMMAND script.sh arg-2)

是我亲爱的同事定义生成的功能的建议:

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
  add_test(NAME ${TEST_NAME}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()

add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)

这很好,但感觉就像是不必要的间接级别

最后,我选择使用a fixture 将必要的零件复制到构建文件夹中,在此处测试并再次清理;这可能是一个更干净,更惯用的解决方案。但是,出于好奇,我仍然对解决原始问题的解决方案感兴趣。

Recently, I have been building a simple test-suite with CTest. In its most simple form it looked something like this:

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

add_test(NAME test_0
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-0)

add_test(NAME test_1
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-1)

add_test(NAME test_2
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMAND script.sh arg-2)

However, as it was growing, I quickly became tired of having to repeat WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} in every test.

Question: Is there a way to set WORKING_DIRECTORY globally (or, yet better, locally within each test subdirectory)? Something like

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

add_test(NAME test_0
  COMMAND script.sh arg-0)

add_test(NAME test_1
  COMMAND script.sh arg-1)

add_test(NAME test_2
  COMMAND script.sh arg-2)

The closest to a solution so far is a recommendation of my dear colleague to define a test-generating function:

cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()

function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
  add_test(NAME ${TEST_NAME}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()

add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)

This works fine but it feels like an unnecessary level of indirection.

In the end, I opted for using a fixture to copy the necessary parts into the build folder, test there and clean up again; this is probably a cleaner and more idiomatic solution. Nevertheless, out of curiosity I would still be interested in a solution to the original problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寄居人 2025-02-07 08:34:35

是否有一种方法可以设置Working_directory全球

在文档中指定了add_test的默认工作_directory。

这很好

了。我会这样:

macro(add_my_test)
  add_test(
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    ${ARGV}
  )
endmacro()

add_my_test(
  NAME test_1
  COMMAND script.sh arg-1
)

您也可以滚动自己的功能“覆盖” cmake命令使用宏命令并还原其默认行为,但我相信只有包装器功能很棒且干净。

Is there a way to set WORKING_DIRECTORY globally

No. The default WORKING_DIRECTORY for add_test is specified in documentation.

This works fine

Do it. I would do:

macro(add_my_test)
  add_test(
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    ${ARGV}
  )
endmacro()

add_my_test(
  NAME test_1
  COMMAND script.sh arg-1
)

You can also roll your own functionality 'Overwrite' cmake command using a macro and restore its default behavior , but I believe just a wrapper function is great and clean.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文