【问题标题】:How to get a directory path of resources during test runs?如何在测试运行期间获取资源的目录路径?
【发布时间】:2019-11-20 06:26:27
【问题描述】:

我有以下目录结构:

root
| - includes
| - src
| - test
    |- unit
    |- integration
    |- resources

我想知道如何在 test/resources 文件夹的测试(执行它们时)中获取目录路径,因为我想从该目录中引用(加载)一些东西。

资源未构建,它们代表普通的xml 文件。

问题是多个人正在构建这个项目,其中一些人在源代码中构建它,而其他人在外部构建它,所以带有测试代码的可执行文件(我们称之为TestRunner.exe)将有一个不同的运行文件夹。这意味着在测试运行期间目录路径不会更改,但这仍然不意味着我们可以像../resources 那样静态引用它,这意味着我们的TestRunner.exe 位于test/build 文件夹中,因为有人可以构建它在其他地方进行项目。

【问题讨论】:

  • 有什么可以阻止您使用absolute 文件路径?
  • @Leif_Lundberg 是的,这个测试应该也可以在 Windows 上运行。
  • 以下哪些目录(如果有)包含 CMakeLists.txt 文件?
  • @squareskittles 包含CMakeLists.txt 文件的目录为rootsrctest
  • 当您说“我想知道如何获取目录路径”时...您希望何时访问此路径?何时构建 TestRunner 可执行文件? TestRunner 可执行文件何时运行?目前尚不清楚您打算如何使用资源路径。资源路径是否会改变?资源是否也已构建,因此可以在源内构建还是在源外构建?

标签: c++ linux windows cmake


【解决方案1】:

在 unit/ 和 integration/ 下的 CMakeLists.txt 文件中,您可以定义如下变量:

set(RESOURCES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../resources")
get_filename_component(RESOURCES_ABS_PATH ${RESOURCES_PATH} ABSOLUTE)

您可以使用其中一个变量将参数传递给您的测试,或定义环境变量、编译符号或build a configuration file 标头。

见:https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_SOURCE_DIR.html

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2016-09-26
    • 2013-10-25
    • 2013-06-23
    • 2011-04-24
    • 2020-04-16
    相关资源
    最近更新 更多