makefile:为什么这个简单的makefile只处理第一个源文件?

[解决了]

我无法让这个简单的makefile正常工作。

这应该建立三个源文件NeonAs1.cpp NeonAs2.cpp NeonAs3.cpp到'obj'文件夹中的目标文件。

这工作,但它只试图建立NeonAs1.cpp,然后完成没有错误。

有任何想法吗?

WORKSPACE=../../workspace/
SRC_FOLDER=$(WORKSPACE)/ProjectNeon/
LOCAL_SRC_FILES=NeonAs1.cpp NeonAs2.cpp NeonAs3.cpp

vpath %.cpp $(SRC_FOLDER)

OBJECTS = $(patsubst %.cpp,obj/%.o,$(LOCAL_SRC_FILES)) 

$(OBJECTS): | obj

obj:
    @mkdir -p $@

obj/%.o : %.cpp
    @echo $< 
    @$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
    -rm -f $(LIBRARY) obj/*.o

更新1:如果我添加一个明确的所有目标,如:

all: $(OBJECTS)

那么如果我做一个明确的:

make all 

它工作正常..当我只做一个没有'全部'的目标时,我怎么能使它工作


更新2:解决,我只需要将我的所有目标移动到$(OBJECTS)目标之上。


make的默认行为是只生成Makefile中列出的第一个目标。 我没有看到任何早于$(OBJECTS): | obj列出的目标$(OBJECTS): | obj $(OBJECTS): | obj 。 因此,“第一个目标规则”将构建$(OBJECTS)列出的第一件事。

要获得所有的$(OBJECTS)内置,您需要一个目标为最终的可执行文件取决于$(OBJECTS)

为了让你的Makefile符合通常的惯例,你要列出一个名为目标all在Makefile年初这就要看你的可执行文件,以及。 这样,当你输入makemake all ,它会建立你的$(OBJECTS)和你的可执行文件。

出于调试的目的,您可能会添加一个名为debugvars:的目标debugvars:执行@echo OBJECTS=$(OBJECTS)以确保$(OBJECTS)的设置符合您的预期。 要运行该目标,可以输入make debugvars 。 这是我用过很多次在Makefile中调试变量的方便技巧。

链接地址: http://www.djcxy.com/p/61445.html

上一篇: makefile: Why does this simple makefile only process the first source file?

下一篇: makefile:4: *** missing separator. Stop