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年初这就要看你的可执行文件,以及。 这样,当你输入make
或make all
,它会建立你的$(OBJECTS)
和你的可执行文件。
出于调试的目的,您可能会添加一个名为debugvars:
的目标debugvars:
执行@echo OBJECTS=$(OBJECTS)
以确保$(OBJECTS)
的设置符合您的预期。 要运行该目标,可以输入make debugvars
。 这是我用过很多次在Makefile中调试变量的方便技巧。
上一篇: makefile: Why does this simple makefile only process the first source file?