我有理由不想依赖特定的构建系统。我并不是要否定任何人的最爱,但我真的只想坚持编译器附带的内容。在这种情况下,GCC。Automake 有一定的兼容性问题,尤其是在 Windows 上。<3 GNU make 是如此有限以至于它经常需要用 shell 脚本来补充。Shell 脚本可以有多种形式,长话短说,可能会激怒很多人,这就是我想要做的——
主要的切入点是上帝。无论是 C 还是 C++ 源文件,它都是应用程序的中心。我不仅希望主入口点是第一个被执行的东西,我还希望它是第一个被编译的东西。让我解释 -
曾经有一段时间,专有库和闭源库很常见。多亏了苹果转向 Unix 和微软在脚下开枪,那个时代结束了。任何需要动态链接的库都可以作为应用程序的支持文件包含在内。出于这个原因,单独的 .SOs(可能还有 .DLLs ;])的构建指令都很好而且很花哨,因为它们是单独的可执行文件。任何其他库都应该静态链接。现在,让我们谈谈静态链接——
静态链接是一个真正的婊子。这就是 makefile 的用途。如果整个项目是用一种语言编写的(例如 C 或 C++),您可以将库作为头文件#include。那很好。但是现在,让我们考虑另一种情况——
假设你和我一样,无法找出 C 对字符串的困难借口,所以你决定使用 C++。但是您想使用 C 库,例如 MiniBasic。上帝帮助我们。如果 C 库的设计不符合 C++ 的语法,那你就完蛋了。这就是 makefile 出现的时候,因为您需要使用 C 编译器编译 C 源文件,并使用 C++ 编译器编译 C++ 源文件。我不想使用makefile。
我希望有一种方法可以利用 GCC 的预处理器宏来告诉它如下内容:
嗨,海合会。你好吗?如果您忘记了,您现在正在查看的这个源文件是用 C++ 编写的。你当然应该用 G++ 编译它。这个文件需要另一个文件,但它是用 C 编写的。它被称为“locats.c”。我想让你用 GCC 把那个编译成一个目标文件,我想让你用 G++ 把这个编译成主目标文件,然后我想让你把它们链接成一个可执行文件。
我怎么能用预处理器行话写这样的东西?海湾合作委员会甚至这样做吗?