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

时间:2013-09-08 13:55:35

标签: c++ linux makefile g++ dependencies

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

问题是我在我的应用程序中使用了一些外部库头文件,并且我希望从生成的依赖项中排除这些头文件,因此如何从这些生成的依赖项中排除某些目录。 [编辑 - 开始] 我已经尝试过使用grep -v,但问题是如果排除的行是特定目标中的最后一行,则下一个目标将加入到该目标到期到该行末尾的转义'\'字符,然后导致损坏的依赖关系规则。除此之外,通过解析它们的库头文件所花费的时间 [Edit-end]

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

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

2 个答案:

答案 0 :(得分:0)

#pragma GCC system_header是用于标识系统标头的gcc编译指示。

您可以在此pragma中使用包含库标题

的代理标头
//Proxy_header.h
#ifndef PROXY_HEADER_H
#define PROXY_HEADER_H

#pragma GCC system_header

#include "external_library.h"

#endif

但后处理依赖关系似乎更清晰。


-MF file似乎是您要编辑依赖项文件后缀的gcc选项。

答案 1 :(得分:0)

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

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