Python 使用cffi编译多个源文件

Python 使用cffi编译多个源文件,python,python-cffi,Python,Python Cffi,我最近发现了cffiPython模块,我想用它为我用Python编写的一些C代码编写单元测试。有一件(可以说是简单的)事情我不明白,那就是如何将几个C源文件编译成一个Python模块,然后由Python代码导入 例如,假设我有四个C文件,a.C,a.h,b.C和b.h,这样a.C既包括a.h又包括b.h并调用b.C中实现的函数。而b.c仅包括b.h 如果我想为在b.c中实现的函数编写单元测试,我可以这样做: import cffi with open('b.h', 'r') as f:

我最近发现了
cffi
Python模块,我想用它为我用Python编写的一些C代码编写单元测试。有一件(可以说是简单的)事情我不明白,那就是如何将几个C源文件编译成一个Python模块,然后由Python代码导入

例如,假设我有四个C文件,
a.C
a.h
b.C
b.h
,这样
a.C
既包括
a.h
又包括
b.h
并调用
b.C
中实现的函数。而
b.c
仅包括
b.h

如果我想为在
b.c
中实现的函数编写单元测试,我可以这样做:

import cffi

with open('b.h', 'r') as f:
    b_h = f.read()

with open('b.c', 'r') as f:
    b_c = f.read()

ffi = cffi.FFI()

ffi.cdef(b_h)
ffi.set_source('_b', b_c)

# import _b ...

但是,如果我想为a.c中定义的函数编写单元测试呢?

核心思想是使用:

ffi.set_source("_mytest", '''
    #include "a.h"
''', sources=["a.c", "b.c"])
编译包含
a.c
b.c
并包含
a.h
的模块,该模块本身包括
b.h
。这将使用
sources=[…]
提供要编译到同一扩展模块中的其他源文件。在该行上方,您可以对感兴趣的C声明使用
ffi.cdef()
——通常是
a.h
b.h
的子集。(您可以多次调用
ffi.cdef()
,也可以只调用一次由多个片段串联而成的字符串。)

什么是?