【问题标题】:Makefile only executes first targetMakefile 只执行第一个目标
【发布时间】:2016-02-11 21:30:36
【问题描述】:

尝试执行默认目标时,仅执行setupo1 目标。剩下的目标没有被执行,我不知道为什么。

另一个潜在的线索:make 不会说什么都不需要做,make 总是会重新编译。

如果创建了目录,则单独创建 o1 o2 o3os 目标将成功完成。

# 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)

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    Makefiles 给 make 一个依赖图。 你的 makefile 告诉 make:

    • all 取决于 o1
      • o1 取决于 tco.srecurs.siter.s
    • all 也依赖于 o2
      • o2 也依赖于 tco.srecurs.siter.s

    一旦make构建了tco.srecurs.siter.s, 然后它已完成所有需要确保o1o2o3os 是最新的。

    顺便说一句,您应该必须将与真实文件不对应的目标声明为.PHONY

    【讨论】:

      猜你喜欢
      • 2011-03-17
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多