代码之家  ›  专栏  ›  技术社区  ›  Sagar

Makefile的帮助:没有规则可使目标

  •  1
  • Sagar  · 技术社区  · 16 年前
    CC = g++
    CFLAGS = -Wall
    
    RM = /bin/rm -rf
    BIN_DIR = 
    
    ifeq "$(DEBUG)" "1"
    BIN_DIR = Debug
    else
    BIN_DIR = Release
    endif
    
    OBJS = \
    $(BIN_DIR)/Unit.o
    
    $(BIN_DIR)/%.o: src/%.c
        @echo Building "$@"
        @g++ -c "$<" -o"$@"
    
    all: $(OBJS)
    clean:
        $(RM) $(BIN_DIR)
    
    .PHONY: all clean
    

    但是,当我尝试构建我的项目时,它会给我一个错误:

    make: *** No rule to make target 'Release/Unit.o', needed by 'all'. Stop.

    我对从头开始编写makefile很陌生,所以这可能是一个愚蠢的问题,但是任何帮助都是值得感谢的!

    2 回复  |  直到 16 年前
        1
  •  1
  •   dmckee --- ex-moderator kitten    16 年前

    问题在于:

    $(BIN_DIR)/%.o: src/%.c
        @echo Building "$@"
        @g++ -c "@<" -o"$@"
    

    我觉得更像是这样:

    $(BIN_DIR)%.o: %.c
        $(CC) -o $@ -c $< $(CFLAGS)
    
        2
  •  1
  •   WolfgangP    16 年前

    正如肖恩·布莱特已经指出的,改变

    @g++ -c "@<" -o"$@"
    

    到

    @g++ -c "$<" -o"$@"
    

    也使Makefile为我工作(ming32 make:GNU make 3.81)

    因为Makefile与源文件位于同一级别(在 src 目录),您的规则失败。