2017-06-19 42 views
0

我有一个基准测试套件,它比较了不同的方法来编写和执行一些简单的玩具Python代码,主要是为了说明Cython。使用distutils编译不带输出名称的纯C代码

我曾经有过的方法之一是在纯C中编写测试函数,用C编译器编译它(让distutils为我找到并调用编译器),然后使用ctypes将该库加载到Python中,并执行该功能。

这一直很流行,直到distutils开始将python版本和平台嵌入到它生成的文件名中。

在过去,我可以说服的distutils编译称为C.c C源文件到图书馆的工作目录下名为C.so:最近的distutils版本坚持重整输出名称到形式build/temp.linux-x86_64-3.6或某事(这依赖于什么distutils功能我使用)一些其他variaton在那个主题。

有没有什么办法可以说服当前版本的distutils只是在当前工作目录中调用输出C.so? (另外,有一些方法可靠而方便地告诉ctypes的地方通过的distutils产生的库所在?)

[奖励:?怎么可以这样的想法可以跨Linux,OS X和Windows便携表示]

= ================================================== ==============

编辑:为完整,这里是我用来成功地做到这一点,在过去:

pure_C_setup.py

from distutils.core import setup, Extension 

setup(name="ctypes-test", 
     ext_modules = [Extension("C", ["C.c"])]) 

用上面的设置文件,命令python pure_C_setup.py install --install-lib=.用于在工作目录下产生C.so;今天它生产build/lib.linux-x86_64-3.6/C.cpython-36m-x86_64-linux-gnu.so

+0

从ditutils.core.Extension的文档,我不知道,如果你正在尝试做的是可能的。我可能是错的。 – SRC

回答

0

不是平台,甚至不是编译器独立的,但你可能能够使用扩展的extra_link_args来实现你想要的。

对于VCPP 2015年:

setup(name="ctypes-test", 
     ext_modules = [Extension("C", ["C.c"], extra_link_args="/OUT:C.pyd")])