C++ 使用Makefile自动编译特定目录中的源文件

C++ 使用Makefile自动编译特定目录中的源文件,c++,makefile,mingw,C++,Makefile,Mingw,环境: 我目前正在使用MinGW(TDM-GCC)和makefiles来学习《openGL超级圣经》第5版中的openGL 本书的示例程序取决于作者创建的自定义工具的标题。这些头文件在代码包中提供。这些标题都互相使用。因此,当您包含一个头文件时,您永远不知道(当然,如果不从上到下逐行检查每个头文件500+行头文件),会调用哪些其他头文件 问题是,这些头文件中有很多都有相应的.cpp文件,其中包含头内容的实现。每当使用一个头(直接包含在我的代码中或包含在我的代码中包含的其他头中),其源文件我没有包

环境
我目前正在使用MinGW(TDM-GCC)和makefiles来学习《openGL超级圣经》第5版中的openGL

本书的示例程序取决于作者创建的自定义工具的标题。这些头文件在代码包中提供。这些标题都互相使用。因此,当您包含一个头文件时,您永远不知道(当然,如果不从上到下逐行检查每个头文件500+行头文件),会调用哪些其他头文件

问题是,这些头文件中有很多都有相应的.cpp文件,其中包含头内容的实现。每当使用一个头(直接包含在我的代码中或包含在我的代码中包含的其他头中),其源文件我没有包含在Makefile的OBJ(source file)变量中,它就会给出错误

问题
如何配置Makefile以使
1.我可以将这些标题的所有.cpp文件放在一个目录中。
2.每当使用需要.cpp的头文件时,就会自动从该目录中检测到相应的.cpp文件,并将其包含在编译中


注意:我已经使用了简单地将这些源文件放入OBJ Makefile变量中的方法,是的,它可以工作。我只是在寻找更好的解决方案。我打算只使用makefile。因此,切换到某个IDE并不是我想要的答案。提前感谢。

简短回答

不要这样做,这不值得付出努力-伊姆霍

长答案

以下假设您的环境是UNIX派生环境

Gcc,-H,在使用时打印出标题名称。您可以捕获它们、过滤掉系统头等等,为每个文件派生一个.cpp文件名,并在makefile中的某个点使用grep/sed/awk或类似的方法编译它们。学习如何使用所有这些都比你的C++练习花费时间长。

或者,您可以将所有提供的.cpp文件编译一次到一个静态库中,然后在makefile中与之链接

请注意,在大多数系统上,链接器会丢弃未使用的对象文件,因此编译所有这些额外文件不会对最终可执行文件产生任何影响,也不会使其变大,等等


最后,您可能希望安装(如果您的平台上有),这是一个可以大大加快c/c++编译速度的程序。在这种情况下,不需要修改MaFaX文件,只要编译所有的东西,第一次后就会很快。

所以这不是C,而是C++。上次我检查过,C也使用了MaxFox文件以及单独的声明和实现文件。1)粗鲁不会让你得到任何地方。2) 小心你指控的人!你甚至都不知道是谁动的!提示:不是我。这让你-什么?3) 这个问题与编程语言本身无关;这是一个关于make的问题,所以实际上根本没有语言标签被纠正。4)显然,我不是唯一一个认为问题是OT的人。5)如果你回复某个特定的用户,请正确地回复你的评论。了解规则,请参阅常见问题解答。6)
grep
是你的朋友。