C++ makefiles - 头文件与外部库的依赖关系

标签 c++ linux makefile g++ dependencies

我想将依赖目标添加到我的 Makefile,我知道这可以通过 makedepend 或 g++ -MM 选项来完成,我愿意使用它们中的任何一个,但我更喜欢 -MM 选项,因为它允许我排除标准库(不知道makedepend能不能做到)。

问题是我在我的应用程序中使用了一些外部库 header ,我希望这些 header 从生成的依赖项中排除,所以我如何从这些生成的依赖项中排除某些目录。 [Edit-start] 我已经尝试使用 grep -v 但问题是如果排除的行是某个目标中的最后一个换行,下一个目标将是由于行尾的转义“\”字符导致依赖项规则损坏,因此连接到该目标。除此之外,还需要花费时间来解析库 header [Edit-end]

另一个问题是如何编辑生成的目标文件目标的后缀,我正在使用一个 Makefile,它通过使用这样的目标来编译通过变量提供的源文件:

%.o: %.cpp
    g++ $< -o$*.o ...

最佳答案

第一个问题(外部库)可以通过首先使用 grep -v 然后将输出传递给 sed 'N;s/\\\n\(.*\.o\)/\n\1/;P;D' 删除不需要的转义字符 '\' 以解决由于 引入的排除而导致的连接目标问题grep -v。但是通过外部库 header 解析它们的时间开销仍然是原样。

第二个问题(生成的目标后缀编辑)可以通过 sed 解决,也可以使用 sed 's/.o:/$(MY_SUFFIX):/' where $(MY_SUFFIX) 是替换生成的目标规则中的.o的后缀。

关于C++ makefiles - 头文件与外部库的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684497/

相关文章:

c++ - 避免代码重复定义比较运算符 `<, <=, >, >=, ==, !=` 但考虑到 NaN 的最佳方法?

c - 带有格式化错误跟踪的日志宏

python - 如何通过Python脚本向Linux添加用户?

c++ - GNU Makefile 自动依赖解析

makefile - 铛-3.8 : command not found in WSL (Windows Subsystem for Linux)

c++ - int main 的返回代码 - 有上限吗?

c++ - 如何将 QVariant 转换为自定义类?

python - 'cv::Point2f&' 类型的非常量引用的初始化无效

linux - If/then 语句与 awk

c++ - 如何在 Visual Studio 2017 上构建 LIBSVM?