对于我的python扩展,我同时拥有C(来自嵌入式库)和C ++文件,它们被编译并链接在一起。只有C ++部分(通过SWIG)与Python交互。这在带有VS2015的Windows和Linux下的gcc中都可以使用。但是,使用gcc时,C ++文件需要与C文件不同的一组编译器标志(例如-std = c ++ 11,-Wno-reorder),以避免出现有关C中标志不合适的警告。
setuptools / distutils中是否可以单独更改每个文件的编译器标志,例如。基于文件扩展名?
我已经使用了https://stackoverflow.com/a/36293331/3032680的自定义构建步骤。
主要问题是,它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,也将C-Source文件重命名为.cpp。此解决方案很丑陋,但我摆脱了gcc和CLang的错误-尤其是因为此解决方案再次模糊了C和C ++之间的语言障碍。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句