我的目标是从多个 C 源文件构建单个模块/扩展。实现这一目标的最佳实践是什么?
我尝试了什么:
我知道该ffi.set_source
函数具有 optionalsources
和include_dir
kwargs,并且应该有可能使用这些 kwargs 从多个源文件构建单个共享对象。不幸的是,我在CFFI Documentation的 API 参考中找不到任何关于这些 kwargs 的信息。所以我无法弄清楚细节。是否有任何文件解释如何正确使用这些 kwargs?
我目前使用:
SOURCES = ('file_1.c', 'file_2.c')
SRC_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../src')
ffi_builder = FFI()
ffi_builder.set_source(
'module_name._module_name',
''.join(f'#include "{source}"\n' for source in SOURCES),
include_dirs=[SRC_ROOT],
)
...
虽然这确实有效,但对我来说似乎有点 hacky。是否可以使用sources
kwarg 而不是第二个位置 arg source
?这将使我摆脱骇人听闻的''.join(f'#include "{source}"\n' for source in SOURCES)
部分。
如果有更简单的方法,我也会感兴趣!
任何帮助表示赞赏。谢谢!