Extract shared Makefile config into common.mk

CC, CFLAGS, and BUILD are now defined once in common.mk at the repo root.
Each module and CLI Makefile sets ROOT then includes common.mk, eliminating
the repeated definitions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-25 22:15:03 +00:00
parent eb65181fe7
commit e1b848333b
5 changed files with 39 additions and 33 deletions

7
common.mk Normal file
View File

@@ -0,0 +1,7 @@
# Included by all module and cli Makefiles.
# Each including Makefile must set ROOT before including this file:
# ROOT := $(abspath <relative path to repo root>)
CC = gcc
CFLAGS = -std=c11 -Wall -Wextra -D_GNU_SOURCE -flto -I$(ROOT)/include
BUILD = $(ROOT)/build

View File

@@ -1,29 +1,28 @@
ROOT := $(abspath ../..) ROOT := $(abspath ../..)
CC = gcc include $(ROOT)/common.mk
CFLAGS = -std=c11 -Wall -Wextra -D_GNU_SOURCE -flto -I$(ROOT)/include
BUILD = $(ROOT)/build
CLI_BUILD = $(BUILD)/cli
COMMON_OBJ = $(BUILD)/common/error.o COMMON_OBJ = $(BUILD)/common/error.o
MEDIA_CTRL_OBJ = $(BUILD)/media_ctrl/media_ctrl.o MEDIA_CTRL_OBJ = $(BUILD)/media_ctrl/media_ctrl.o
V4L2_CTRL_OBJ = $(BUILD)/v4l2_ctrl/v4l2_ctrl.o V4L2_CTRL_OBJ = $(BUILD)/v4l2_ctrl/v4l2_ctrl.o
.PHONY: all clean modules .PHONY: all clean modules
all: modules $(BUILD)/cli/media_ctrl_cli $(BUILD)/cli/v4l2_ctrl_cli all: modules $(CLI_BUILD)/media_ctrl_cli $(CLI_BUILD)/v4l2_ctrl_cli
modules: modules:
$(MAKE) -C $(ROOT)/src/modules/common $(MAKE) -C $(ROOT)/src/modules/common
$(MAKE) -C $(ROOT)/src/modules/media_ctrl $(MAKE) -C $(ROOT)/src/modules/media_ctrl
$(MAKE) -C $(ROOT)/src/modules/v4l2_ctrl $(MAKE) -C $(ROOT)/src/modules/v4l2_ctrl
$(BUILD)/cli/media_ctrl_cli: media_ctrl_cli.c $(COMMON_OBJ) $(MEDIA_CTRL_OBJ) | $(BUILD)/cli $(CLI_BUILD)/media_ctrl_cli: media_ctrl_cli.c $(COMMON_OBJ) $(MEDIA_CTRL_OBJ) | $(CLI_BUILD)
$(CC) $(CFLAGS) -o $@ $^ $(CC) $(CFLAGS) -o $@ $^
$(BUILD)/cli/v4l2_ctrl_cli: v4l2_ctrl_cli.c $(COMMON_OBJ) $(V4L2_CTRL_OBJ) | $(BUILD)/cli $(CLI_BUILD)/v4l2_ctrl_cli: v4l2_ctrl_cli.c $(COMMON_OBJ) $(V4L2_CTRL_OBJ) | $(CLI_BUILD)
$(CC) $(CFLAGS) -o $@ $^ $(CC) $(CFLAGS) -o $@ $^
$(BUILD)/cli: $(CLI_BUILD):
mkdir -p $@ mkdir -p $@
clean: clean:
rm -f $(BUILD)/cli/media_ctrl_cli $(BUILD)/cli/v4l2_ctrl_cli rm -f $(CLI_BUILD)/media_ctrl_cli $(CLI_BUILD)/v4l2_ctrl_cli

View File

@@ -1,17 +1,17 @@
ROOT := $(abspath ../../..) ROOT := $(abspath ../../..)
CC = gcc include $(ROOT)/common.mk
CFLAGS = -std=c11 -Wall -Wextra -D_GNU_SOURCE -flto -I$(ROOT)/include
BUILD = $(ROOT)/build/common MODULE_BUILD = $(BUILD)/common
.PHONY: all clean .PHONY: all clean
all: $(BUILD)/error.o all: $(MODULE_BUILD)/error.o
$(BUILD)/error.o: error.c $(ROOT)/include/error.h | $(BUILD) $(MODULE_BUILD)/error.o: error.c $(ROOT)/include/error.h | $(MODULE_BUILD)
$(CC) $(CFLAGS) -c -o $@ $< $(CC) $(CFLAGS) -c -o $@ $<
$(BUILD): $(MODULE_BUILD):
mkdir -p $@ mkdir -p $@
clean: clean:
rm -f $(BUILD)/error.o rm -f $(MODULE_BUILD)/error.o

View File

@@ -1,17 +1,17 @@
ROOT := $(abspath ../../..) ROOT := $(abspath ../../..)
CC = gcc include $(ROOT)/common.mk
CFLAGS = -std=c11 -Wall -Wextra -D_GNU_SOURCE -flto -I$(ROOT)/include
BUILD = $(ROOT)/build/media_ctrl MODULE_BUILD = $(BUILD)/media_ctrl
.PHONY: all clean .PHONY: all clean
all: $(BUILD)/media_ctrl.o all: $(MODULE_BUILD)/media_ctrl.o
$(BUILD)/media_ctrl.o: media_ctrl.c $(ROOT)/include/media_ctrl.h $(ROOT)/include/error.h | $(BUILD) $(MODULE_BUILD)/media_ctrl.o: media_ctrl.c $(ROOT)/include/media_ctrl.h $(ROOT)/include/error.h | $(MODULE_BUILD)
$(CC) $(CFLAGS) -c -o $@ $< $(CC) $(CFLAGS) -c -o $@ $<
$(BUILD): $(MODULE_BUILD):
mkdir -p $@ mkdir -p $@
clean: clean:
rm -f $(BUILD)/media_ctrl.o rm -f $(MODULE_BUILD)/media_ctrl.o

View File

@@ -1,17 +1,17 @@
ROOT := $(abspath ../../..) ROOT := $(abspath ../../..)
CC = gcc include $(ROOT)/common.mk
CFLAGS = -std=c11 -Wall -Wextra -D_GNU_SOURCE -flto -I$(ROOT)/include
BUILD = $(ROOT)/build/v4l2_ctrl MODULE_BUILD = $(BUILD)/v4l2_ctrl
.PHONY: all clean .PHONY: all clean
all: $(BUILD)/v4l2_ctrl.o all: $(MODULE_BUILD)/v4l2_ctrl.o
$(BUILD)/v4l2_ctrl.o: v4l2_ctrl.c $(ROOT)/include/v4l2_ctrl.h $(ROOT)/include/error.h | $(BUILD) $(MODULE_BUILD)/v4l2_ctrl.o: v4l2_ctrl.c $(ROOT)/include/v4l2_ctrl.h $(ROOT)/include/error.h | $(MODULE_BUILD)
$(CC) $(CFLAGS) -c -o $@ $< $(CC) $(CFLAGS) -c -o $@ $<
$(BUILD): $(MODULE_BUILD):
mkdir -p $@ mkdir -p $@
clean: clean:
rm -f $(BUILD)/v4l2_ctrl.o rm -f $(MODULE_BUILD)/v4l2_ctrl.o