我需要使用Cmockery将单元测试添加到用作手工制作的 Makefile 的现有构建环境中。所以我需要弄清楚如何构建 cmockery.c(没有 automake)。
当我运行时:
g++ -DHAVE_CONFIG_H -DPIC -I ../cmockery-0.1.2 -I /usr/include/malloc -c ../cmockery-0.1.2/cmockery.c -o obj/cmockery.o
我得到一长串这样的错误:
../cmockery-0.1.2/cmockery.c: In function ‘void initialize_source_location(SourceLocation*)’:
../cmockery-0.1.2/cmockery.c:248: error: cast from ‘SourceLocation*’ to ‘int’ loses precision
这是 cmockery.c 的第 247:248 行:
static void initialize_source_location(SourceLocation * const location) {
assert_true(location);
assert_true
在 cmockery.h 的第 154 行定义:
#define assert_true(c) _assert_true((int)(c), #c, __FILE__, __LINE__)
所以问题(如错误状态)是GCC不喜欢从'SourceLocation *'到'int'的转换。
./configure
我可以使用and构建 Cmockery make
(在 Linux上,如果我首先在 Mac OS X 上export CFLAGS=-I/usr/include/malloc
),没有任何错误。我尝试查看运行时编译 cmockery.c 的命令行make
(之后./configure
):
gcc -DHAVE_CONFIG_H -I. -I. -I./src -I./src -Isrc/google -I/usr/include/malloc -MT libcmockery_la-cmockery.lo -MD -MP -MF .deps/libcmockery_la-cmockery.Tpo -c src/cmockery.c -fno-common -DPIC -o .libs/libcmockery_la-cmockery.o
...但我没有看到任何可能解决此错误的选项。
在“错误:从 'void*' 转换为 'int' 失去精度”中,我看到我可以将(int)
cmockery.h 更改为(intptr_t)
. 我已经确认这是有效的。./configure
但是由于我可以使用and构建 Cmockery make
,因此必须有一种方法可以在不修改源代码的情况下构建它。