如何使用make来维护一个通用的C ++头包含目录?

时间:2013-09-06 11:18:53

标签: c++ makefile header-files

我的项目由大约十二个组件组成,每个组件的源代码都在主源代码目录下的自己的子目录中。许多组件使用来自其他组件的头文件,我正在尝试安排一些事情,以便这些头文件在单个include/目录中都可用。如果这是一个坏主意,或者如果有更好的方法可以让一个组件的标题轻松地提供给另一个组件,请立即停止我。

在构建组件后,将组件的标头复制到include/非常简单:makefile中的cp *.hpp ../include运行良好。但是当在单个组件上运行make clean时,我想从include/中删除该组件的标头,而不删除任何其他组件。据我所知,这意味着我必须在makefile的“remove”命令中维护组件头文件的列表,如下所示:

clean:
    rm -fv ../include/header1.hpp ../include/header2.hpp ...

维护此列表是手动工作,我想自动完成。我想要做到这一点,因为我预计如果在将相同标头的新版本复制到位之前构建依赖于复制标头的组件时会出现问题 - 这非常耗费时间来诊断问题。

如何让makefile清理单独目录中的标题列表?或者,是否有更好的方法可以将我的头文件提供给同一项目中的其他组件?

2 个答案:

答案 0 :(得分:1)

  

或者,是否有更好的方法可以将我的头文件提供给同一项目中的其他组件?

有两种明显而简单的方法:

  1. 首先将include目录中的所有标题保留在
  2. 为每个组件设置CPPFLAGS,告诉它在哪里找到它的依赖项。
  3. 我建议使用前一种方法来处理小型,紧密耦合的项目。对于真正的组件化系统,第二种方法更好,因为它会迫使您考虑项目中的内部依赖关系。

答案 1 :(得分:1)

无论您是手动与否,复制文件和使用副本构建其他组件都是容易出错的。 larsmans提出了一些替代方案。

但是如果你想继续使用copy-on-build方法,那么通过make进行清理就可以这样做:

TO_COPY = $(wildcard *.hpp)
TO_REMOVE = $(patsubst %.hpp, ../include/%.hpp, $(TO_COPY))

第一个变量将包含当前目录中的所有.hpp文件,第二个变量将包含每个文件名前加../include/的相同文件。 因此,您可以使用以下命令将文件复制到包含文件夹:

cp $(TO_COPY) ../include/

并在最后删除它们:

rm $(TO_REMOVE)