我有以下假设的 Makefile:
all: SOURCE = $(wildcard src/*.cpp)
unity: SOURCE = $(wildcard unity/*.cpp)
OBJECTS = $(SOURCE:.cpp=.o)
all: prog
unity: prog
prog: $(OBJECTS)
$(CXX) $(OBJECTS) -o prog
我需要根据初始目标使用不同的源文件/对象进行编译。在我看来,变量扩展在依赖项上比在目标主体中发生得更早,因为上面的编译器命令用正确的文件名调用就好了,但是 prog 依赖项中的 $OBJECTS 仍然是空的,所以没有一个对象被建成。
unity 文件夹包含一个组合源文件,其中包含用于进行统一构建的所有其他源文件。这个统一文件是由 makefile 生成的,但它被忽略了,实际上可能是多个统一目标文件。
我的设计是失败的原因吗?我是否将不得不求助于递归 make 来实现这一目标?