我的实验室工作有一个 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
最初不存在。
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")
@Tsyvarev 注意到,我正在运行一个单独的 .cpp 文件,这就是原因。启动配置时,似乎没有问题。