cython 파일에 사전 컴파일러 논리를 추가하는 솔루션을 찾고 있습니다.Cython 프리 컴파일러 의사 결정
나는 C++에있는 하드웨어 장치 API를위한 cython 래퍼를 작성했다. 이것은 파이썬 2.7과 3.6을 위해 일반적으로 MSVC를 사용하여 컴파일되는 cython 프로젝트입니다. 전체 패키지는 외부 C++ 또는 헤더 파일없이 cython으로 작성됩니다.
처음에는이 소프트웨어를 Windows 컴퓨터에서 사용하기 위해 작성 했으므로 많은 기본 winapi 기능을 사용하여 커널 이벤트 루프 및 winapi 오류 메시지에 액세스하는 데 도움이되었습니다. 잘 작동하지만 크로스 플랫폼 컴파일 기능을 추가하고 싶습니다. 이것은 내가 리눅스 기계에서 작동하도록하기 위해 몇 가지 주요 기능을 완전히 대체해야한다. 예를 들어 하드웨어 API에는 OS에 따라 다른 이벤트 처리 기능이 있습니다. 또한 winapi 이벤트 처리를 대체해야합니다.
지금은 전체 프로젝트를 단일 모듈로 컴파일하여 가져 오기 작업을 간소화했습니다. 모든 코드는 hwmodule.pyd
파일로 컴파일되는 동일한 pyx 파일에 있습니다. 그러나 크로스 플랫폼 컴파일의 목표를 달성하려면 설치시 여러 개의 작은 pyx 파일에서 파일을 함께 패치해야합니다. 이 솔루션은 우아하고 유지하기 어렵습니다. 말할 것도없이, 이것은 프로젝트에 추가하고 싶은 다른 사람들을 훈련시키기가 더 어렵습니다.
이상적으로는 플래그 또는 변수에 따라 해석되고 컴파일되는 C 컴파일 시간 플래그에 cython을 쓸 수 있습니다. 내 목표를 달성 할 수있는 cython의 솔루션이 있습니까? 또는 우아하고 유지하기 쉬운 다른 조직이 있습니까? 사이 썬이 가능한이라면 우아한 수있다 용액
예 : 주석으로부터 확장
# `#ifdef`
#ifdef __WINAPI
def foo():
print('bar win')
#else
def foo():
print('bar linux')
#endif
#---
# `with` block
with ifdef('__WINAPI'):
def foo():
print('bar win')
#---
# line endings
def foo() ifdef('__WINAPI'):
print('bar win')
def foo() ifndef('__WINAPI'):
print('bar win')
스팸 태그 금지! – Olaf
Cython이 이미 [이와 비슷한 기능을 지원합니다] (http://cython.readthedocs.io/en/latest/src/userguide/language_basics.html#conditional-compilation)? – DavidW
@Olaf 두 언어로 작성된 유효한 해결책이있을 수 있으므로'C++','python','c'에 태그를 추가했습니다. 즉. 'setup.py'에서 파이썬을 사용하거나 특별한 기능을 다루기 위해'C++'파일을 추가하는 것입니다. 이러한 언어 간 기능은 cython으로 가능합니다. 당신이 그것을 이해하지 못했을 때를 대비 한 것은 단지 참고 일뿐입니다. – scicalculator