是否可以使用python编译c代码?

Ran*_*ber 4 c python compiler-construction compiler-errors compilation

我想构建一个python程序,它将.c文件的路径作为输入,然后编译它.

如果编译成功,程序将输出OK到屏幕,否则输出BAD.

我一直试图谷歌,但找不到任何东西.我一直在尝试使用编译程序的参数在python中运行cmd,但它不起作用.

澄清 - 我已经在我的机器中有一个非常具体的编译器,我想运行它.我不希望python充当编译器.只需获取代码,在其上运行我的编译器,然后查看答案是什么.

  • 它应该在使用python 2.4的Linux服务器上运行.

谢谢

Tyl*_*ves 8

当然,为什么不呢?当然,您需要安装GCC(或llvm),以便您可以编译.您可以使用os.system或任何其他方式来调用外部程序.

当然,你可能更喜欢看SCons之类的东西,它已经存在以解决这个问题.

另外,为了回答实际问的问题,没有什么可以阻止你在python中编写编译器/汇编器/链接器,它们只是像其他任何程序一样的程序.但性能可能不会很好.

  • Scons 在这方面有什么帮助。你能详细说明一下吗? (2认同)

S.L*_*ott 7

步骤1.获得PLY.Python Lex和Yacc. http://www.dabeaz.com/ply/

步骤2.找到C的Yacc/Lex配置.http://www.lysator.liu.se/c/ANSI-C-grammar-y.html

步骤3.调整PLY以使用您找到的C语言规则.

第4步.运行.你正在"编译"C代码 - 检查语法.


hoe*_*ing 5

您可以仅使用标准库编译 C 代码,它可以在每个平台和每个 Python 版本上运行(假设您实际上有一个 C 编译器可用)。查看distutils.ccompilerPython 用于编译 C 扩展模块的模块。一个简单的例子:

// main.c

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

编译脚本:

# build.py
from distutils.ccompiler import new_compiler

if __name__ == '__main__':
    compiler = new_compiler()
    compiler.compile(['main.c'])
    compiler.link_executable(['main.o'], 'main')
Run Code Online (Sandbox Code Playgroud)

其他所有内容(包括路径、库路径、自定义标志或链接参数或宏)都可以通过各种配置选项传递。查看上面指向模块文档的链接以获取更多信息。

  • `&lt;stdin&gt;:1:DeprecationWarning:distutils 包已弃用并计划在 Python 3.12 中删除。使用 setuptools 或检查 PEP 632 以获得潜在的替代方案` (4认同)