如何使用 make 来维护一个通用的C++标头包含目录
How can I use make to maintain a common C++ header include directory?
我的项目由大约十几个组件组成,每个组件的源代码都位于主源代码目录下自己的子目录中。 许多组件使用来自其他组件的头文件,我正在尝试安排内容,以便这些头文件都可以在单个include/
目录中使用。 如果这是一个坏主意,或者如果有更好的方法可以使一个组件的标头轻松提供给另一个组件,请立即停止我。
组件的标头复制到include/
非常简单:makefile 中的cp *.hpp ../include
工作得很好。 但是,当make clean
在单个组件上运行时,我想从include/
中删除该组件的标头,而不删除任何其他组件。 据我所知,这意味着我必须在 makefile 的"remove"命令中维护组件头文件的列表,如下所示:
clean:
rm -fv ../include/header1.hpp ../include/header2.hpp ...
维护此列表是手动工作,我想自动化。 我想解决这个问题,因为如果在将同一标头的新版本复制到位之前构建依赖于复制标头的组件,我预计会出现问题 - 诊断问题非常耗时。
如何让我的生成文件清理单独目录中的标头列表? 或者,是否有更好的方法可以使我的头文件可用于同一项目中的其他组件?
或者,是否有更好的方法可以使我的头文件可用于同一项目中的其他组件?
有两种明显而简单的方法:
- 首先将所有标头保留在
include
目录中 - 为每个组件设置
CPPFLAGS
,以告知在何处查找其依赖项。
对于小型、紧密耦合的项目,我推荐前一种方法。第二种方法更适合真正的组件化系统,因为它迫使您考虑项目中的内部依赖项。
复制文件并使用副本构建其他组件很容易出错,无论您如何手动或不手动。 拉斯曼斯在上面提出了一些替代方案。
但是,如果您想继续使用构建时复制方法,可以通过 make 进行清理,如下所示:
TO_COPY = $(wildcard *.hpp)
TO_REMOVE = $(patsubst %.hpp, ../include/%.hpp, $(TO_COPY))
第一个变量将包含当前目录中的所有 .hpp 文件,第二个变量将包含相同的文件,每个文件名前面都带有../include/
。因此,您可以使用以下命令将文件复制到包含文件夹:
cp $(TO_COPY) ../include/
并在最后删除它们:
rm $(TO_REMOVE)
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)