使编译对象依赖于头文件,但仍然使用`$ ^`

时间:2018-04-03 11:01:38

标签: makefile

我有以下makefile

mybin.a: source1.cpp source2.cpp
   g++ $^ -o $@

现在,source.cpp包含我希望mybin.a依赖的头文件。如果我这样做:

mybin.a: source1.cpp source2.cpp header.hpp
   g++ $^ -o $@

然后不必要地编译头文件。我知道我可以这样做

mybin.a: source1.cpp source2.cpp header.hpp
   g++ source1.cpp source2.cpp -o $@

但我不喜欢它,因为我必须重复两次源文件的名称。有没有办法让两个世界中最好的?

1 个答案:

答案 0 :(得分:1)

你可以做点什么:

mybin.a: source1.cpp source2.cpp header.hpp
    g++ $(filter %.c %.cpp,$^) -o $@

或者,你可以采用更标准的方式做事:

%.o: %.cpp
    $(CC) $(CLFAGS) $< -o $@

#...

SRCS := source1.cpp source2.cpp
OBJS := $(SRCS:.cpp=.o)

source1.o : header.hpp

mybin.a: $(OBJS)
     $(CC) $(LDFLAGS) $^ -o $@