在 GTest macOS 中找不到 CSTDDEF 文件

CSTDDEF file not found in GTest macOS

我正在尝试使用 Gtest 在 C 中创建一个项目以进行单元测试。 为此,我安装了 Xcode 开发者工具(因为我在 macOS big sur 环境中)。在此之后,我正在克隆 gtest 并添加到子模块中。

但是,当我尝试 运行 测试时,出现错误:

googletest/googletest/include/gtest/gtest.h:52:10: fatal error: 'cstddef' file not found

尝试重新安装 Xcode 工具后,下载 header 在我的环境中设置它,我没有更多的想法。

您有解决这个问题的想法吗?或者有人有同样的想法吗?

感谢

PS : 这是我的 CMakeLists

cmake_minimum_required(VERSION 3.0)
project(MasterDSA)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -o3")
add_library(Addition src/addition.c include/addition.h)
add_executable(Main src/main.c)
target_link_libraries(Main Addition)

set_target_properties(Main
    PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")


set (gtest_force_shared_crt ON CACHE BOOL "MSVC defaults to shared CRT" FORCE)
add_subdirectory(googletest/googletest)
target_compile_definitions(gtest
  PUBLIC
    GTEST_LANG_CXX20
    GTEST_HAS_TR1_TUPLE=0
)
add_executable(tests)
target_sources(tests
  PRIVATE
    test/addition_test.c
)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${cxx_strict}")
target_link_libraries(tests gtest gtest_main Core)

您正在尝试使用 C 编译器编译 C++ 代码(在 gtest.h 中)。 (CMake 为名称以 .c 结尾的源文件选择 C ​​编译器。)C 和 C++ 是不同的语言,一般来说,在任何方向上都不兼容源代码。您必须使用 C 编译器编译 C,使用 C++ 编译器编译 C++。

如果相当小心,则可以在两种语言的共享子集中编写代码,或者使用预处理器来适应所选语言,但这并不常见,除了有时声明函数和具有(从 C++ 的角度来看)C 链接的外部对象。这显然不是你的 gtest.h 的写法。

您的主要选择是:

  • 将您的项目转换为 C++ 项目。此举意义重大,切勿轻举妄动。
  • 为您的 C 代码编写 C++ 测试。这可能可行也可能不可行。
  • 选择 C ​​测试框架而不是特定于 C++ 的 GTest。