【问题标题】:C++: Import/Include systemC++:导入/包含系统
【发布时间】:2018-02-09 22:49:20
【问题描述】:

我正在编写一种编程语言,它将源文件转换为 C++ 并编译它们。

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

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

问题是:我的解释器在 GCC 编译它们之后删除了 .cpp.h。因为这个,它不能使用#include,因为当它编译时,引用的文件不存在了。我该如何解决这个问题?

【问题讨论】:

  • 很难理解您的要求。通常编译是通过MakefileRakefile 或任何其他构建自动化项目自动进行的。我不认为你想在编译后删除你的源代码,我想你可能想不时地clean你的项目的状态(这意味着:删除中间对象.o ,或删除最终链接的可执行文件)。使用构建自动化软件,您可以只编译依赖于已更改源的中间文件,从而减少编译时间。
  • @MatteoRagni 我的程序将创建 C++ 文件并编译它,所以我不希望用户看到这些文件,因为他将使用我的语言,而不是 C++。为此,我需要在编译之前删除文件。为了让用户能够使用makefiles或类似的东西,程序需要编译为.o,但我不想保存C++文件。
  • 抱歉,恕我直言,您必须仔细重写您的问题。我真的很难理解你在做什么以及你想要实现什么。
  • @MatteoRagni 我的英语有严重问题。我编辑了帖子,希望我改进了它。
  • 您有一个工具可以读取源文件 (foo.FN) 并写入 C++ 源文件和头文件(foo.cppfoo.h)。然后编译器(gcc)读取这些源文件和头文件(foo.cppfoo.h)并写入一个目标文件(foo.o)。并且可能存在相互依赖关系(bar.cpp 需要 foo.h)。对吗?

标签: c++ import package


【解决方案1】:

答案分为两部分。

首先,不要写显式的头文件。你知道它们应该包含什么,只需自己执行#include 操作即可。

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

【讨论】:

  • 感谢您的回答。你知道在哪里可以阅读 Python 或 GoLang import 的工作原理吗?
  • @FelipeNascimento:任何基础教程。但是,当您仍在为此苦苦挣扎时,编写自己的语言将是不现实的。
  • 我在问他们的编译器是如何进行导入的。比如我知道C++的#include复制header的内容。
猜你喜欢
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多