将目录上下文传递给编译器

时间:2015-09-21 23:43:41

标签: c compiler-construction compiler-theory

我在C中编写Java编译器就像一个娱乐项目。但是,我注意到当我们在命令行中编译文件时,例如“gcc example.c”,编译器能够在终端的工作目录中找到example.c而不会出错。编译器如何知道要搜索example.c的目录? OS是否在编译器的目录中找到example.c?另外,我如何在我的C程序中模拟这个动作,以便用户可以通过调用我的编译器从任何工作目录编译他们的java程序,如:“compiler example.java”?

2 个答案:

答案 0 :(得分:1)

fopen会将亲属路径视为相对于当前目录,而不是可执行文件所在的目录。大多数(甚至全部)文件处理功能与大多数其他语言相同。

因此,为了模拟Java编译器的行为,您需要做的就是遍历argvfopen(the_file_name)中的文件名,为该文件生成代码,然后fopen(class_file_name, "wb") (其中class_file_namefile_name.java替换为.class),并将生成的字节码写入其中。

获取当前目录的完整路径既不必要也不有用。请注意,如果您只是将每个参数附加到当前目录名称,则代码将中断绝对路径,而对于相对路径和绝对路径,简单地执行任何操作都将执行正确的操作。

答案 1 :(得分:0)

如果我理解正确,您需要获取当前工作目录的完整路径。 POSIX函数 getcwd (在Windows _getcwd 上)可用于检索程序的当前工作目录。

然后搜索此目录并找到您的源(如果它们存在)应该很简单。