2017-09-18 53 views
0

是否可以禁用與distutils.core.Extension創建共享對象?我想在鏈接之前停止編譯器(即g++ -c ...)。禁用distutils的鏈接步驟

我在swigging一個本地文件,它創建一個目標文件和一個python文件。我還有其他代碼可以編譯,以後我會鏈接到這個目標文件,所以我不想在編譯.o之後繼續這樣做。

$ python setup.py build 
running build 
.... 
building 'foo' extension 
swigging src/foobar.i to src/foobar.cpp 
swig -python -c++ -o src/foobar.cpp src/foobar.i 

我想停在這裏,但它仍在繼續。

creating build/temp.linux-x86_64-2.7 
creating build/temp.linux-x86_64-2.7/src 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Isrc -I/usr/include/python2.7 -c src/foobar.cpp -o build/temp.linux-x86_64-2.7/src/foobar.o 
g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/src/foobar.o -o build/lib.linux-x86_64-2.7/foobar.so 

是否需要直接使用CCompiler類?或者有沒有辦法來糾結Extension課程?

23  ext_modules=[ 
24   # Swig 
25   Extension(
26    name='foobar', 
27    sources=['src/foobar.i'], 
28    include_dirs=['src'], 
29    swig_opts=['-c++'], 
30  ), 
31  ] 
+0

看起來,distutils中的'build_extension'命令就是爲你做的,並且沒有太多的事情可以做,而不會破壞build_ext.compiler類。 https://fossies.org/dox/Python-2.7.13/build__ext_8py_source.html#l00451 –

回答

0

不可能停止而不修改基礎ccompiler對象鏈接步驟。理論上可以覆蓋底層ccompilerlink_shared_object功能,從而無需執行任何操作(請參閱build_extsource)。

但是,要回答此問題的原意,可以使用Swig接口文件將C/C++文件傳遞給擴展,而無需獨立編譯它們並稍後進行鏈接。沒有必要分開swig文件生成和庫編譯。