仅为列表中的某些文件指定先决条件

时间:2017-02-25 04:15:56

标签: makefile gnu-make

如果@JsonIgnore private Map<String, Object> additionalProperties = new HashMap<String, Object>(); @JsonAnyGetter public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; } @JsonAnySetter public void setAdditionalProperty(String name, Object value) { this.additionalProperties.put(name, value); } 包含main.cpp,如果functions.h发生更改,main.o是否必须重新关联?

如果没有,我想知道我什么时候有这样的文件列表:

functions.h

objects = main.o factorial.o hello.o (定义在functions.h中声明的函数)和factorial.cpp(定义在functions.h中声明的函数)和hello.cpp都包含{{1 }};我有这样的规则:

main.cpp

如何指定functions.h中只有部分文件的先决条件为$(objects): %.o: %.cpp recipe ?如果我仅为$(objects)

创建特殊规则
functions.h

第二条规则是否也应用于main.o,从而不必具备必备的函数。?

1 个答案:

答案 0 :(得分:1)

如果main.cpp包含标题文件functions.h,则只要main.o更改,就应重建functions.h

您只需编写所需的先决条件即可指定一些应依赖于标题的文件:

objects = main.o factorial.o hello.o

$(objects): %.o: %.cpp
        recipe

factorial.o hello.o: functions.h

现在,这两个.o文件依赖于functions.h,但main.o却没有。

修改

哈,这是一个经典案例,可以回答你提出的问题,而不是你想要回答的问题:)。

您可以使用filterfilter-out功能轻松完成此操作。例如,假设你有:

SOME := foo.o bar.o
ALL := $(SOME) biz.o baz.o boz.o blah.o blee.o bor.o bag.o

$(ALL): %.o: %.cpp
        recipe

$(filter-out $(SOME),$(ALL)): functions.h

然而,也许你应该再往前走,问自己是否真的想要或者需要这样做。如果你真的在这里谈论C / C ++程序中的头文件,而不是别的东西,并且你真的有那么多文件,也许你应该考虑在你的makefile中添加automatic dependency generation而不是手工编写。< / p>

相关问题