在下面的代碼中,我期望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