为什么我删除vpath指令时此makefile失败?

问题描述 投票:0回答:1

我正在使用GNU GCC makefile,并使其易于构建您好工作的程序

CC=gcc
SOURCES=./Source/main.c
BUILD_DIR=./Build
TARGET=main

all: $(BUILD_DIR)/$(TARGET).exe

OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(SOURCES)))

$(BUILD_DIR)/%.o: %.c
    $(CC) -c $< -o $@

$(BUILD_DIR)/%.exe: $(OBJECTS)
    $(CC) $< -o $@

我不明白为什么删除或评论此行vpath %.c $(sort $(dir $(SOURCES))),停止并显示此错误:


> Executing task: D:\Servers\Compilers\MinGW\bin\mingw32-make.exe GCC_PATH=D:\Servers\Compilers\gcc-arm-none-eabi\bin <

mingw32-make: *** No rule to make target 'Build/main.exe', needed by 'all'.  Stop.

请向我解释原因

c gcc gnu-make
1个回答
0
投票

您已将前缀添加到目标文件,因此您的对象是'./Build/main.o'。但是,当您使用静态规则时,“。o”后缀将被替换为“ .c”,因此您的对象是./Build/main.c。您的main.c不在目录“ Build”中,因此当然失败。添加vpath %.c $(sort $(dir $(SOURCES)))时,它将自动从目录.c中找到Build文件。

© www.soinside.com 2019 - 2024. All rights reserved.