Auto-compilation 个使用 Makefile 的特定目录中的源文件
Auto-compilation of source files in a particular directory using Makefile
情况:
我目前正在将 MinGW (TDM-GCC) 与 makefile 一起使用,以从书中学习 openGL "OpenGL Superbible, ed. 5"。
本书的示例程序依赖于作者创建的自定义工具header。这些 header 在代码包中提供。 header 都互相使用。所以你永远不知道(当然,没有从上到下,逐行检查每个 header 500+行 header 文件),当你包含一个 header 文件.
事实是,其中许多 header 也有相应的 .cpp 文件,其中包含 header 内容的实现。每当使用 header(直接包含在我的代码中或包含在我包含在我的代码中的其他一些 header 中)时,我没有将其源文件包含在 OBJ(源文件)变量中Makefile,它给出了错误。
问题:
如何配置我的 Makefile 使得
1.我可以把那些header的所有.cpp文件放在一个目录下。
2. 每当使用需要 .cpp 的 header 时,会自动从该目录中检测到相应的 .cpp 文件并包含在编译中。
注意:我已经使用了将这些源文件中的每一个简单地放置在 OBJ Makefile 变量中的方法,是的,它有效。我只是在寻找更好的解决方案。我打算只坚持使用 Makefile。所以切换到一些 IDE 不是我要找的答案。提前致谢。
简答
不要这样做,不值得付出努力 - 恕我直言
长答案
以下假设您的环境是 UNIX 衍生环境。
Gcc supports a flag, -H, 打印出 header 使用的名称。您可以捕获它们,过滤掉系统 headers 等,为每个派生一个 .cpp 文件名,并在您的 makefile 中的某个点编译它们,使用 grep/sed/awk 或类似的东西。学习如何使用所有这些可能比完成 C++ 练习花费的时间更长。
或者,您可以将所有提供的 .cpp 文件编译一次到一个静态库中,然后link在您的 makefile 中使用它。
请注意,在大多数系统上未使用的 object 文件会被 linker 丢弃,因此编译所有这些额外的文件不会对最终的可执行文件做任何事情,不会使其变大等
最后,您可能需要安装 ccache(如果它在您的平台上可用),它是一个可以大大加快 c/c++ 编译速度的程序。在这种情况下不需要更改 makefile,只需编译所有内容,第一次后会很快。
情况:
我目前正在将 MinGW (TDM-GCC) 与 makefile 一起使用,以从书中学习 openGL "OpenGL Superbible, ed. 5"。
本书的示例程序依赖于作者创建的自定义工具header。这些 header 在代码包中提供。 header 都互相使用。所以你永远不知道(当然,没有从上到下,逐行检查每个 header 500+行 header 文件),当你包含一个 header 文件.
事实是,其中许多 header 也有相应的 .cpp 文件,其中包含 header 内容的实现。每当使用 header(直接包含在我的代码中或包含在我包含在我的代码中的其他一些 header 中)时,我没有将其源文件包含在 OBJ(源文件)变量中Makefile,它给出了错误。
问题:
如何配置我的 Makefile 使得
1.我可以把那些header的所有.cpp文件放在一个目录下。
2. 每当使用需要 .cpp 的 header 时,会自动从该目录中检测到相应的 .cpp 文件并包含在编译中。
注意:我已经使用了将这些源文件中的每一个简单地放置在 OBJ Makefile 变量中的方法,是的,它有效。我只是在寻找更好的解决方案。我打算只坚持使用 Makefile。所以切换到一些 IDE 不是我要找的答案。提前致谢。
简答
不要这样做,不值得付出努力 - 恕我直言
长答案
以下假设您的环境是 UNIX 衍生环境。
Gcc supports a flag, -H, 打印出 header 使用的名称。您可以捕获它们,过滤掉系统 headers 等,为每个派生一个 .cpp 文件名,并在您的 makefile 中的某个点编译它们,使用 grep/sed/awk 或类似的东西。学习如何使用所有这些可能比完成 C++ 练习花费的时间更长。
或者,您可以将所有提供的 .cpp 文件编译一次到一个静态库中,然后link在您的 makefile 中使用它。
请注意,在大多数系统上未使用的 object 文件会被 linker 丢弃,因此编译所有这些额外的文件不会对最终的可执行文件做任何事情,不会使其变大等
最后,您可能需要安装 ccache(如果它在您的平台上可用),它是一个可以大大加快 c/c++ 编译速度的程序。在这种情况下不需要更改 makefile,只需编译所有内容,第一次后会很快。