环境下:
我目前正在使用带有makefile的MinGW(TDM-GCC)从书中学习openGL" OpenGL Superbible,ed。 5&#34 ;.
本书的示例程序取决于作者创建的自定义工具的标题。这些标头在代码包中提供。标题都互相使用。所以你永远不知道(当然,从上到下,逐行检查每个标题500 +行头文件),当你包含一个头文件时,会调用其他头文件。
问题是,很多这些标头也有相应的.cpp文件,这些文件带有标题内容的实现。无论何时使用标头(直接包含在我的代码中或包含在我的代码中包含的其他标头中),其源文件我都没有包含在Makefile的OBJ(源文件)变量中,它会出错
问题:
如何配置我的Makefile以便
1.我可以将这些标题的所有.cpp文件放在一个目录中
2.每当使用需要.cpp的标头时,将自动从该目录检测相应的.cpp文件并将其包括在内以进行编译。
注意:我已经使用过简单地将每个源文件放在OBJ Makefile变量中的方法,是的。我只是在寻找更好的解决方案。我打算只坚持使用Makefiles。因此,切换到某些IDE并不是我正在寻找的答案。提前谢谢。
答案 0 :(得分:0)
简短回答
不要这样做,不值得努力 - 恕我直言
答案很长
以下假设您的环境是UNIX衍生产品。
Gcc supports a flag, -H ,在使用时打印出标题名称。您可以捕获它们,过滤掉系统标题等,为每个文件生成一个.cpp文件名,然后使用grep / sed / awk或其他一些文件在makefile中的某些点编译它们。学习如何使用所有这些可能比花在C ++练习上的时间更长。
或者,您可以将所有提供的.cpp文件一次编译到静态库中,然后在makefile中将其链接。
请注意,在大多数系统中,链接器会丢弃未使用的目标文件,因此编译所有这些额外文件不会对最终可执行文件执行任何操作,也不会使其更大,等等。
最后,您可能希望安装ccache(如果它在您的平台上可用),它是一个可以大大加快c / c ++编译速度的程序。在这种情况下不需要对makefile进行任何更改,只需编译所有内容,第一次就会很快。