【发布时间】:2016-02-11 21:30:36
【问题描述】:
尝试执行默认目标时,仅执行setup 和o1 目标。剩下的目标没有被执行,我不知道为什么。
另一个潜在的线索:make 不会说什么都不需要做,make 总是会重新编译。
如果创建了目录,则单独创建 o1 o2 o3 或 os 目标将成功完成。
# tail call test Makefile
# written by mwolf
SRC= tco recurs iter
OBJS= $(SRC:=.o)
ASMS= $(SRC:=.s)
SRC_DIR= src
OUT_DIRS= o1 o2 o3 os
CC=gcc
INCLUDE= -I.
EXECUTABLE=
WARNINGS= -Wall -Wextra -Wfloat-equal -Wundef -Wshadow -Wpointer-arith \
-Wcast-align -Wstrict-overflow=5 -Wwrite-strings \
-Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum \
-Wconversion -Wunreachable-code -Wformat=2 -Winit-self \
-Wuninitialized -Werror-implicit-function-declaration
CFLAGS= -c -pedantic $(WARNINGS)
SFLAGS= -S -pedantic $(WARNINGS)
LIBS=
all: setup
all: o1
all: o2
all: o3
setup:
mkdir -p $(OUT_DIRS)
o1: SFLAGS+= -O1
o1: OUT_DIR=o1
o1: $(ASMS)
o2: SFLAGS+= -O2
o2: OUT_DIR=o2
o2: $(ASMS)
o3: SFLATS+= -O3
o3: OUT_DIR=o3
o3: $(ASMS)
os: SFLAGS+= -Os
os: OUT_DIR=os
os: $(ASMS)
%.o: $(SRC_DIR)/%.c
$(CC) $(INCLUDE) $(CFLAGS) -c $< -o $@
%.s: $(SRC_DIR)/%.c
$(CC) $(INCLUDE) $(SFLAGS) -S $< -o $(OUT_DIR)/$@
clean:
rm -f *~
rm -f $(ASMS)
rm -f $(OBJS)
rm -rf $(OUT_DIRS)
【问题讨论】: