使用 CMake 将测试文件添加到现有项目中的正确方法是什么?

问题描述 投票:0回答:1

我的实验室工作有一个 git 存储库。它们都是相互关联的,并且每个都使用另一个的某些东西(例如,二叉搜索树实验室工作使用分配器和记录器,它们各自是独立的工作)。

最初,存储库基本上拥有所需的所有文件,实验室工作的制作是为了将特定数据结构的实现写入每个工作的.cpp 文件中。但后来我发现缺少一些文件:我们对每项工作都有测试,测试由 test.cpp 文件和特定测试场景的 CMakeLists 文件组成。

由于我已经完成了其中一项任务并想要测试它,所以我创建了一个新的 test.cpp 文件(因为那里没有提供),并且基本上将另一个 CMakeLists 文件的内容从其他任务复制到空的 CMakeLists 中,这是在当前任务的目录中提供。

现在开始主要问题: 在我的代码中,我使用了包含 <> 的标题(例如

#include <binary_search_tree.h>
)。这是通过相应 CMakeLists 文件中的链接库完成的。当我使用“新”CMakeLists 文件创建并启动新测试文件时,我的 IDE (CLion 2024.1) 开始向我显示包含 <> 是一个编译错误:

g++.exe D:\stud\GITrepos\mp_os\arithmetic\fraction\tests\tests.cpp -o tests
In file included from 
[path here]\mp_os\arithmetic\fraction\tests\tests.cpp:6:
[path here]/mp_os/arithmetic/fraction/include/fraction.h:5:10: fatal error: big_integer.h: No such file or directory
    5 | #include <big_integer.h>
      |          ^~~~~~~~~~~~~~~
compilation terminated. 

紧接着,其他正常工作的任务也出现了同样的问题 - 包括 <> (或者甚至是“”,如果我仅将其与标头名称一起使用?没有其相对路径)出现为编译错误。 我回滚了更改,结果发现,仅仅 test.cpp 文件的存在就会引发此类错误 - 一旦我删除它,所有错误都消失了(同样,所有其他文件仍然与正常工作时相同) ).

总结: 想测试我的任务是否正确完成; 创建额外的 .cpp 文件会引发错误。

问题:为什么另一个 .cpp 文件会引发错误?在这种情况下测试我的任务的正确方法是什么?

尝试过的解决方案: 使用 CLion“修复 IDE”工具并使缓存失效; 从我同事正确运行的类似项目中复制文件; 没有任何效果。

图片上是我同事工作项目的项目目录层次结构。文件

tests.cpp
最初不存在。 project hierarchy

fraction/tests/CMakeLists.txt 的内容(原本为空)如下:

cmake_minimum_required(VERSION 3.21)
project(arthmtc_fraction_tests)

# For Windows users: prevent overriding the parent project's compiler/linker settings
# set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

add_executable(
        arthmtc_fraction_tests
        fraction_tests.cpp)

target_link_libraries(
        arthmtc_fraction_tests
        PUBLIC
        arthmtc_frctn)
set_target_properties(
        arthmtc_fraction_tests PROPERTIES
        LANGUAGES CXX
        LINKER_LANGUAGE CXX
        CXX_STANDARD 14
        CXX_STANDARD_REQUIRED ON
        CXX_EXTENSIONS OFF
        VERSION 1.0
        DESCRIPTION "fraction implementation library fraction tests")

c++ cmake clion
1个回答
0
投票

@Tsyvarev 注意到,我正在运行一个单独的 .cpp 文件,这就是原因。启动配置时,似乎没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.