如何在Cython中使用不同的C++编译器?

6

我正在进行一个从Python调用C++的项目。我们使用Cython来实现这个目的。当使用命令"python3.6 setup.py build_ext --inplace"编译时,会使用编译器"x86_64-linux-gnu-gcc"。有没有办法使用不同的编译器,比如"arm-linux-gnueabihf-g++"?

此外,是否有一种方法可以添加编译选项,例如"-DPLATFORM=linux"?

以下是setup.py的内容:

from distutils.core import setup, Extension
from Cython.Build import cythonize

setup(ext_modules = cythonize(Extension(
    "app",
    sources=["app.pyx", "myapp.cpp"],
    language="c++",
    include_dirs=["../base"]
)))

请查看以下链接:https://dev59.com/ipjga4cB1Zd3GeqPRfTv - altunyurt
1
这个回答解决了你的问题吗?如何告诉distutils使用gcc? - ead
3个回答

3

您可以在setup.py中设置CC环境变量的值。例如:

os.environ["CC"] = "g++"

或者
os.environ["CC"] = "clang++"

2

默认情况下,Distutils使用CC系统环境变量来决定使用哪个编译器。您可以在调用setup()之前,在脚本开头设置CC变量,以便运行Python脚本。

关于向编译器传递标志,可以在Extension()模块中添加一个名为extra_compile_args的命名参数。例如,它可能看起来像这样:

from distutils.core import setup, Extension
from Cython.Build import cythonize

setup(ext_modules = cythonize(Extension(
    "app",
    sources=["app.pyx", "myapp.cpp"],
    language="c++",
    include_dirs=["../base"],
    extra_compile_args=["-DPLATFORM=linux"]
)))

1
为了指定Cython的C++编译器,您需要在调用setup.py之前设置正确的CXX环境变量。
这可以通过以下方式完成:
- 使用命令行选项:
export CXX=clang++-10
  • setup.py文件中:
os.environ["CXX"] = "clang++-10"

注意: clang++-10 是替代的 C++ 编译器的示例。
注意: CC 环境变量指定的是 C 编译器,而非 C++。您可以考虑同时指定例如 export CC=clang-10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接