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()
,也可以只调用一次由多个片段串联而成的字符串。)什么是?