我想构建一个python程序,它将.c文件的路径作为输入,然后编译它。
如果编辑成功,程序将向屏幕输出OK,否则为BAD。
我一直试图谷歌,但找不到任何东西。我一直在尝试使用编译程序的参数在python中运行cmd,但它不起作用。
澄清 - 我已经在我的机器中有一个非常具体的编译器,我想运行它。我不希望python充当编译器。只需获取代码,在其上运行我的编译器,看看答案是什么。
由于
答案 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或宏)都可以通过各种配置选项传递。请查看上面指向模块文档的链接以获取更多信息。