2017-06-19 46 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")])