2017-09-18 11 views
0

distutils.core.Extension으로 공유 객체 생성을 비활성화 할 수 있습니까? 링크하기 전에 컴파일러를 중지하고 싶습니다 (예 : g++ -c ...).distutils의 링크 단계 사용 안함 확장자

나는 개체 파일과 파이썬 파일을 만드는 네이티브 파일을보고있다. 나중에이 객체 파일과 링크 할 다른 코드를 컴파일해야하므로 .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 

직접 컴파일러 클래스를 사용해야합니까? 아니면 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 참조).

그러나이 질문의 원래 의도에 대답하기 위해 C/C++ 파일을 독립적으로 컴파일하고 나중에 링크 할 필요없이 Swig 인터페이스 파일로 Extension에 전달할 수 있습니다. swig 파일 생성과 라이브러리 컴파일을 분리 할 필요는 없습니다.