我有一个.pxd文件,其中包含另一个c头文件中的变量声明,可以从以下代码中理解:
cdef extern from "parameters.h":
ctypedef struct mm_np:
int nlay
double n1
double n2[3]
double d[3]
double n3
int lut
当文件parameters.h与运行cythonizing脚本的文件夹相同时 - 一切都很完美。
问题: 如何做同样的事情包括文件“parameters.h”在不同的目录而不是.pxd文件所在的目录?
我尝试用
替换此代码的第一行cdef extern from "/liboptv/include/parameters.h":
不起作用,当我进行cythonize时,我收到一条消息,说明找不到该文件:
致命错误:/liboptv/include/parameters.h:没有这样的文件或目录
感谢。
答案 0 :(得分:3)
如上所述,以下列方式之一包含头文件目录的路径更为健壮:
-I
编译器选项include_dirs
setuptools参数INCLUDE
环境变量您还可以使用上述某个选项中包含的一条路径的相对导入。例如,如果要包含标题:
/usr/include/test/soft1/mod1/header1.h
/usr/include/test/soft1/mod2/header2.h
/usr/include/test/soft1/mod3/header3.h
您可以添加一个包含所有这些路径的子文件夹:
gcc ... -I/usr/include/test/soft1
在Cython中使用相对导入:
cdef extern from "mod1/header1.h":
...
cdef extern from "mod2/header1.h":
等等。