0

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

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

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

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

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

4

2 回答 2

1

或者,是否有更好的方法让我的头文件可用于同一项目中的其他组件?

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

  1. 首先将所有标题保留在include目录中
  2. 为每个组件设置CPPFLAGS以告诉它在哪里找到它的依赖项。

对于小型、紧密耦合的项目,我建议使用前一种方法。第二种方法更适合真正的组件化系统,因为它迫使您考虑项目中的内部依赖关系。

于 2013-09-06T11:22:04.453 回答
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)
于 2013-09-06T12:04:29.357 回答