联与Python 3.7 C模块中。 CMake的在Windows(Linking C modu

2019-11-05 05:32发布

我试图创建一个C库,可以从Python的调用,到目前为止,我已经创建了公开(只有一个方法被添加为简单起见,模块信息和方法表中的代理C文件get_cycle_count及其实施无关):

static PyMethodDef NESulator_methods[] = {
        {"NESulator",  get_cycle_count, METH_VARARGS, "Retrieves the current cycle count"},
        {NULL, NULL, 0, NULL}        /* Sentinel */
};

static struct PyModuleDef NESulator_module = {
        PyModuleDef_HEAD_INIT,
        "NESulator",    /* name of module */
        NULL,           /* module documentation, may be NULL */
        -1,             /* size of per-interpreter state of the module,
                           or -1 if the module keeps state in global variables. */
        NESulator_methods
};

/*
 * Should this be called somewhere? Will the linker do something with this?
 */
PyMODINIT_FUNC PyInit_NESulator(void)
{
    return PyModule_Create(&NESulator_module);
}

现在, 文件说,(显然)我的C库有以某种方式处理,这样Python才能真正导入。 只要创建一个C库,而不是通过CMake一个可执行文件(而克利翁,不VS所以编译器是MinGW的GCC)我已经得到了,但我找不到,也不知道我是如何suposed做,与CMake的。

这件作品的CMake的生成一个名为libNESulator.a但没有dlllib文件制作和.py文件(在相同的位置.a做时库)不能找到它import libNESulatorimport NESulator后者是在定义的名称PyModuleDef结构。 所以我敢肯定有东西丢失有

project(NESulator)
set(CMAKE_C_STANDARD 11)
add_subdirectory(src)

find_package(PythonLibs REQUIRED)

include_directories(${PYTHON_INCLUDE_DIRS})

add_library(NESulator "all of my .c files in the src directory previously included" )

target_link_libraries(NESulator ${PYTHON_LIBRARIES})

所以....是啊,你有什么想法如何把这一libNESulator.a成一个Python可调用的模块? 我需要什么,在这个CMake的做做到这一点?

如果你有这样做或任何其他方式都更简单的方法,请随时提出它。 我是很新的CMake和Python的,所以我不知道,如果你需要我更多的信息,如该项目的结构左右,但请让我知道如果你这样做。

非常感谢

文章来源: Linking C module with Python 3.7. CMake in Windows