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

时间:2012-02-23 20:24:27

标签: python c compiler-construction compilation compiler-errors

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

如果编辑成功,程序将向屏幕输出OK,否则为BAD。

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

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

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

由于

4 个答案:

答案 0 :(得分:8)

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

当然,你可能最好看一下SCons之类的东西,它已经存在以解决这个问题。

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

答案 1 :(得分:7)

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

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

的Yacc / Lex配置

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

步骤4.运行。你正在“编译”C代码 - 检查语法。

答案 2 :(得分:2)

如果我清楚地理解你,你只想用python中的一些参数运行编译器?

在这种情况下,您可以只使用os.system。 http://docs.python.org/library/os.html#os.system

或者更好的方法是模块“子进程”。 http://docs.python.org/library/subprocess.html#module-subprocess

答案 3 :(得分:2)

您只能使用标准库来编译C代码,并且该代码将在每个平台和每个Python版本上运行(假设您实际上有一个C编译器可用)。检出Python用于编译C扩展模块的distutils.ccompiler模块。一个简单的例子:

// main.c

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return(0);
}

编译脚本:

# build.py
from distutils.ccompiler import new_compiler

if __name__ == '__main__':
    compiler = new_compiler()
    compiler.compile(['main.c'])
    compiler.link_executable(['main.o'], 'main')

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