皆さんいろいろと情報をどうもです
結局、以下のようなものと落ち着いてます
ちなみに使ってる環境のmakeはGNU Make 4.4で、GNU Makeの機能を多用してます

「$(OBJDIR)%.o: $(SRCDIR)%.c」と書ける理由は、pattern rulesという機能なのですかね
ここをforeachとかで書こうとしてましたが、これでいけると聞き、書いてみたら動いたのでもうそのままです

以外に汎用性が出そうだと感じてますが、改良点があればまたご意見ほしいです

PROGRAM = c_sample.exe

SRCDIR = ./src/
OBJDIR = ./obj/
INCDIR = ./include/

SRCS = $(wildcard ${SRCDIR}*.c)
OBJS = $(addprefix $(OBJDIR), $(notdir $(patsubst %.c, %.o, ${SRCS})))
INCS = $(wildcard ${INCDIR}*.h)

CC = gcc
CFLAGS += -g -Wall -I$(INCDIR)

all: $(PROGRAM)

$(PROGRAM): $(OBJS)
  $(CC) $(CFLAGS) -o $(PROGRAM) $^

$(OBJDIR)%.o: $(SRCDIR)%.c $(INCS) Makefile
  $(CC) $(CFLAGS) -c $< -o $(patsubst $(SRCDIR)%, $(OBJDIR)%, $@)