2017-08-31 69 views
-4

我正在编写一种编程语言,将源文件转换为C++并编译它们。C++:导入/包含系统

我想添加一种方式来处理大量文件,将它们编译为.o文件,从而可以使用makefile。一个更好的解释(感谢@Beta):

你有一个工具,可读取源文件(foo.FN)和写入C++源文件和头文件(foo.cppfoo.h)。然后编译器(gcc)读取这些源文件和头文件(foo.cppfoo.h)并写入一个目标文件(foo.o)。也许有相互依存关系(bar.cpp需要foo.h)。

的问题是:我的翻译删除.cpp.h的GCC编译后他们。因为这样,它不能使用#include,因为它会编译时,引用的文件不再存在。我如何解决这个问题?

+0

很难理解你所要求的。通常编译是通过'Makefile','Rakefile'或任何其他**构建自动化**项目自动完成的。我不认为你想在编译后**删除**你的源代码,我想你可能需要不时清理你的项目的状态(这意味着:删除中间对象'.o',或者删除最终链接的可执行文件使用编译自动化软件可以仅编译依赖于已更改源的中间文件,从而缩短编译时间。 –

+0

@MatteoRagni我的程序会创建C++文件来编译它,所以我不希望用户看到这些文件,因为他会使用我的语言,而不是C++。为此,我需要在编译之前删除这些文件。为了用户能够使用'makefiles'或类似的东西,程序需要编译为'.o',但我不想保存C++文件。 –

+0

对不起,但恕我直言,你必须仔细改写你的问题。我很难理解你在做什么以及你想达到什么。 –

回答

0

答案有两部分。

首先,不要写明确的头文件。你知道他们应该包含什么,只需自己执行#include操作。

其次,不要写出.cpp文件。使用gcc -x c++ -从标准输入中读取代码,并让您的工具将C++发送到标准输出,以便您可以运行tool foo.FN | gcc -c -o foo.o -x c++ -以生成foo.o

+0

感谢您的回答。你知道在哪里可以阅读Python或GoLang的'import'工作方式吗? –

+1

@FelipeNascimento:任何基本教程。但是,当你仍然在为此而努力时,编写自己的语言并不现实。 – MSalters

+0

我在问他们的编译器如何进行导入。例如,我知道C++的#include拷贝头的内容。 –