更改此MakeFile,以便它可以自动将目录中的所有文件视为依赖关系

change this makefile so that it will automatically consider all files in a directory as a dependency?

本文关键字:文件 依赖 关系 MakeFile      更新时间:2023-10-16

这是我正在制作的第一个makefile,我需要您的帮助来更改它。这是我现在拥有的makefile

VPATH = src
BUILD = build
BIN = bin
INCLUDE = C:UserssidhiDesktopProjectssfml-snakeinternalLibrariesinclude
$(shell mkdir -p build)
$(shell mkdir -p bin)
CC = g++ 
CFLAGS  = -g -std=c++11
LIBS=-lsfml-graphics -lsfml-window -lsfml-system

G++_VER_LT48 := $(shell expr `$(CC) -dumpversion | cut -f1-2 -d.` < 4.8 )
ifeq ("$(G++_VER_LT48)","1")
$(error old version of g++ not supported, upgrade to 4.8 or higher)
endif

default: bin/game

$(BIN)/game: $(BUILD)/main.o $(BUILD)/game.o $(BUILD)/food.o $(BUILD)/snake.o
    $(CC) $(CFLAGS) -o $(BIN)/game $(BUILD)/main.o $(BUILD)/game.o $(BUILD)/food.o $(BUILD)/snake.o $(LIBS)

$(BUILD)/%.o: %.cpp
    $(CC) -c $(CFLAGS) $< -o $@ -I $(INCLUDE)

我想更改它,以使构建/目录中的所有文件都添加为依赖关系。像

bin/game: $(BUILD)/%.o

但这不起作用。

另外,我如何包含更多的vpath路径?

gnu制造具有许多有用的内置功能,您可以用来生成文件列表。例如,此:

SRCFILES := $(wildcard *.cpp) 

在当前目录中创建一个.cpp文件的列表,然后以下内容:

OBJFILES := $(patsubst %.cpp,%.o,$(SRCFILES))

在该列表上执行编辑以创建相应.o文件的新列表。

您可以尝试以下操作:

OBJ=$(shell find $(PROJDIRS) -type f -name "*.o")

,然后:

$(BIN)/game: OBJ

希望这会有所帮助...