我正在编写一个编译器,它将我编写的一种语言(称为SLang(目前这些文件只有几个推,而不是它的重要))编译成C ++(最终是ELF,Mach-O和PE,但后来会出现)。这是我的第一个编译器,并想知道包含库的最佳方法?在c / c ++中,只是通过复制和粘贴来导入库(最糟糕的是。我确定会有更复杂的东西在那里)。这是编译器的最佳方法吗?对于那些无法匹配gcc / visual c ++ / clang预处理器的人来说,有更有效的方法吗?提前感谢您提供任何帮助。需要明确的是,我并不是要求具体的代码,只是提出如何做的想法。
Side Note 如果有人知道任何编译器特定的论坛或irc频道,我很想知道它们是什么。我已经查看并查看过,除了#gcc或#clang等产品的特定内容之外,还没有找到。
编辑:我上面错过了。我知道只有头文件被粘贴到包含它的文件中,然后链接器将源文件与更多的源文件和/或库链接起来。然而,我仍在寻找包含库的最有效方法,而无需为SLang编写链接器
答案 0 :(得分:0)
你没有提供一个小小的" Hello World"您的编程语言示例,并且,您链接,没有直接显示任何示例。
过去尝试做类似的事情。
你可能想看看D,因为它是一个类似的已知案例:
大多数编程语言没有头文件,但是,如果编译为C或C ++,可能会生成头文件。
您的编译器/编程语言如何处理单独的文件? 您的编译器/编程语言如何定位单独的文件?
我建议您的编程语言支持名称空间或模块。 " Plain C"和" PHP",最初没有名称空间。
类似的东西:
文件:" CollectionExample.sprg"
namespace CollectionExample;
import Collections = "c:\\slang\\Collections.slib";
...
void main()
{
// do something with definitions in "Collections"
}
...
它可能会生成C ++文件,如:
文件:" CollectionExample.hpp"
和
文件:" CollectionExample.cpp"
#include "c:\\slang\\Collections.hpp"
#include "c:\\slang\\CollectionExample.hpp"
...
我还建议,在您的编程语言中,使用与主程序不同的文件扩展名或文件后缀。
干杯。