在下面的代码中,我期望app/outputs.list
进行更新时,相关的脚本会运行,并且在最后一次make时未触及脚本时,不会调用脚本。最后,编译器必须被调用。即使在更新依赖关系后也不会调用目标
但是,即使编辑app/outputs.list
,也不会以任何方式调用脚本。我在哪里犯错?
的Makefile:
SOURCES := main.cpp
OUTDIR:= ./out
BINDIR:= ./bin
OBJDIR:= ./bin/obj
OBJECTS := $(addprefix $(OBJDIR)/,$(SOURCES:.cpp=.o))
DEPFILES:= $(OBJECTS:.o=.d)
VARLISTS:= app/outputs.list
CXX := g++
CXXFLAGS := -c -g -MD -MP
LIBS:= -lboost_filesystem -lboost_system
.PHONY: all
# default
all: $(VARLISTS) $(BINDIR)/sim
@echo "done"
app/outputs.list:
bash ./scripts/outputs.bash
bash ./scripts/sim_outputs.bash
$(BINDIR)/sim: $(OBJECTS)
$(CXX) $(LDFLAGS) $^ -o [email protected] $(LIBS)
$(OBJDIR)/%.o: %.cpp
@if [ ! -d "$(OBJDIR)" ]; then mkdir -p $(OBJDIR) && echo "$(OBJDIR) directory created: $(OBJDIR)"; fi
$(CXX) $(CXXFLAGS) -MF $(OBJDIR)/$*.d -o [email protected] $<
-include $(DEPFILES)
这是输出:
$ make
./bin/obj directory created: ./bin/obj
g++ -c -g -MD -MP -MF ./bin/obj/main.d -o bin/obj/main.o main.cpp
g++ bin/obj/main.o -o bin/sim -lboost_filesystem -lboost_system
done
但是脚本有echo
证明他们一直呼吁:
#!/bin/bash
echo "outputs called"
看来他们是不叫。
app/outputs.list
文件包含变量列表,并且脚本应该在自动生成的.hpp
文件中生成适当的数组。
什么目标应该取决于'app/outputs.list'文件? – 2015-03-24 23:42:47
@EtanReisner'app/outputs.list'包含一个变量名称列表,脚本根据列表生成相应的'.hpp'文件。我已更新我的帖子。你有什么建议吗? – ar2015 2015-03-25 01:16:58
你错过了这一点。哪些目标应该将该文件作为必备任务,以便它们在更改时应该重新运行?现在唯一的目标就是“全部”(正如我的答案所示)。 – 2015-03-25 01:46:46