Cmake CMockery编译未知类型名称“;jmp_buf“;

Cmake CMockery编译未知类型名称“;jmp_buf“;,cmake,cmockery,Cmake,Cmockery,我正在尝试将单元测试框架cMockery添加到我的C项目中。我已将cMockery下载并安装到全局包含路径中。但是在源文件中包含#include之后,cmake抛出了以下问题。如果我同时使用cMocka,似乎会抛出同样的东西。我丢了一些包裹吗 编辑:谷歌搜索“/usr/include/Google/cmockery.h:365:8:错误:未知类型名称'jmp_buf'”只返回了0个结果(现在是指向此问题的1个结果)。搜索未知类型名“jmp_buf”只解释了它是什么。不是如何修复它,也不是为什么它

我正在尝试将单元测试框架cMockery添加到我的C项目中。我已将cMockery下载并安装到全局包含路径中。但是在源文件中包含
#include
之后,cmake抛出了以下问题。如果我同时使用
cMocka
,似乎会抛出同样的东西。我丢了一些包裹吗

编辑:谷歌搜索
“/usr/include/Google/cmockery.h:365:8:错误:未知类型名称'jmp_buf'”
只返回了0个结果(现在是指向此问题的1个结果)。搜索
未知类型名“jmp_buf”
只解释了它是什么。不是如何修复它,也不是为什么它会发生在cmockery内部

/usr/bin/cmake --build /home/.../data-structures-c/cmake-build-debug --target data_structures_c -- -j 3
Scanning dependencies of target data_structures_c
[ 50%] Building C object CMakeFiles/data_structures_c.dir/main.c.o
In file included from /home/.../data-structures-c/main.c:3:
/usr/include/google/cmockery.h:365:8: error: unknown type name ‘jmp_buf’
 extern jmp_buf global_expect_assert_env;
        ^~~~~~~
make[3]: *** [CMakeFiles/data_structures_c.dir/build.make:63: CMakeFiles/data_structures_c.dir/main.c.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:73: CMakeFiles/data_structures_c.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/data_structures_c.dir/rule] Error 2
make: *** [Makefile:118: data_structures_c] Error 2
OS:Manjaro Archlinux

Cmake、make、gcc、g++都已安装

我的
CMakeList.txt也非常标准,只有一个c源代码

cmake_minimum_required(VERSION 3.12)
project(data_structures_c C)
set(CMAKE_C_STANDARD 99)
add_executable(data_structures_c main.c)

我想知道如何解决这个问题,以便编译我的代码。

根据标题开头的注释:

/*
*这些标题或其等价物应在包含之前包含在内
*这个头文件。
*
*#包括
*#包括
*#包括
*
*这允许测试应用程序使用C标准的自定义定义
*库函数和类型。
*/
在包含此标题之前,应包含以下标题:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#包括
#包括
#包括
只有在这些包括之后,才允许

#include <google/cmockery.h>
#包括

“谷歌搜索未知类型名称‘jmp_buf’”只返回了0个结果。”-不完全正确:尝试谷歌搜索未知类型名称‘jmp_buf’
。好的,第一个结果就是这个问题本身。我搜索的Google语句是
/usr/include/Google/cmockery.h:365:8:错误:未知类型名“jmp_buf”
。结果是零,但现在这个问题只有一个结果<代码>未知类型名称“jmp_buf”仅解释它是什么。而不是如何修复它。我将修改我的问题以调整google查询。谢谢,它可以工作。我真不敢相信我竟然忘了这么做。读取头文件源代码。我一直在考虑丢失的软件包或架构问题。但是通常,在这种情况下,
cmockery.h
不应该包含它的依赖项吗?通常,头本身包含它所需要的一切。但在给定的情况下,他们有一个解释:“这允许测试应用程序使用C标准库函数和类型的自定义定义。”。因此,CMockery还可以用于C库的独立(与托管相反)实现,它不提供像
setjmp.h
这样的公共头。
#include <google/cmockery.h>