如何让CMake显示Catch2编译错误对应的项目内溯源位置
问题描述
我目前正在开发一个依赖Eigen、Catch2、Kokkos等第三方库的大型库项目,全程使用CMake完成构建与链接工作。由于项目依赖关系复杂,暂时难以提供最小可复现示例(MWE)。当前预编译版本的Catch2在编译阶段抛出错误,但CMake未显示该错误在我自有库代码中的触发位置。
CMake启动代码编译后,最终输出如下错误信息:
[ 59%] Building CXX object CMakeFiles/RunTests.dir/tests/Test_File.cpp.o /home/jovyan/installs/CATCH2/include/catch2/benchmark/catch_constructor.hpp(62): error: invalid type conversion 1 error detected in the compilation of "/home/jovyan/.../tests/Test_File.cpp". make[2]: *** [CMakeFiles/RunTests.dir/build.make:121: CMakeFiles/RunTests.dir/tests/Test_File.cpp.o] Error 2 make[1]: *** [CMakeFiles/Makefile2:140: CMakeFiles/RunTests.dir/all] Error 2 make: *** [Makefile:149: all] Error 2
该报错并非单个文件特例:如果移除上述Test_File.cpp,其他所有引入了Catch2/catch_all.hpp的测试文件(已测试多个文件均复现)编译时都会抛出完全相同的错误。
待解决问题
如何配置CMake,才能定位到该错误在我自有项目代码中的触发位置?
补充信息
- 代码使用g++编译时可正常通过,无报错
- 当前正在验证代码的GPU端兼容性,因此使用Kokkos提供的nvcc_wrapper作为编译器
- 暂时无法剥离外部依赖构造独立复现场景,后续会持续尝试构造最小复现示例(MRE)
- 目前已确认问题源于自有库代码与Kokkos/Catch2的交互逻辑
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

