oek*_*pez 6 c c++ python gcc setuptools
对于我的python扩展,我有C(来自嵌入式库)和C++文件,它们被编译和链接在一起.只有C++部分与Python接口(通过SWIG).这适用于使用VS2015的Windows和Linux下的gcc.但是,使用gcc,C++文件需要一组不同的编译器标志(例如-std = c ++ 11,-Wno-reorder)而不是C文件,以避免有关C中不正确标志的警告.
在setuptools/distutils中是否有一种方法可以单独更改每个文件的编译器标志,例如.基于文件扩展名?
我已经从/sf/answers/2540533201/使用了自定义构建步骤.
主要问题是,distutils.ccompiler它不会检查C或C++的文件扩展名,而是使用$ CC运行所有内容.即使定义CXXFLAGS也无济于事.我将在setup.py文件中export使用警告,既不使用也不使用定义os.eniviron.
在使用CLang 8.0.0的macOS上情况变得更糟:尝试使用-std = c ++ 11编译.c文件不是警告而是错误.
由于 distutils 花了很长时间来确保所有文件都使用相同的编译器标志进行编译,无论其文件扩展名是 .c 还是 .cpp。因此,即使使用 CFLAGS 和 CXXFLAGS 也不被考虑在内,但 gcc 和 CLang 仍然以不同的方式处理它们。Visual Studio 只是将所有内容编译为 C++。
我通过接受 C 在大多数情况下仍然是 C++ 的子集并将 C 源文件重命名为 .cpp 来解决我的问题,即使文件包含 C。这个解决方案很丑陋,但我摆脱了 gcc 中的警告和CLang 的错误 - 特别是因为这个解决方案再次模糊了 C 和 C++ 之间的语言障碍。
我后来采用的第二个解决方案是从 distutlis 外部的 C 代码创建一个静态库,并将Python 扩展链接到该静态库。
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |