Skip to content

Instantly share code, notes, and snippets.

@ksvbka
Last active April 1, 2017 17:56
Show Gist options
  • Select an option

  • Save ksvbka/ba7ce2a74ad5aae401925e020a72ec39 to your computer and use it in GitHub Desktop.

Select an option

Save ksvbka/ba7ce2a74ad5aae401925e020a72ec39 to your computer and use it in GitHub Desktop.
Make file for project witch structure -main.c /module1/*c /module2/*c
CC = gcc
FLAGS = -g
SRC_DIR := module1 module2 .
INCLUDE := $(addprefix -I, $(SRC_DIR))
SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
OBJ := $(patsubst %.c, build/%.o,$(SRC))
PROG := build/test.out
vpath %.c $(SRC_DIR)
all:$(PROG)
$(PROG):$(OBJ)
$(CC) $(FLAGS) $(OBJ) -o $(PROG)
build/%o:%c
@mkdir -p $(dir $@)
$(CC) $(FLAGS) -c $< -o $@
clean:
rm -rf build
test:
@echo $(OBJ)
@echo $(SRC)
@echo $(SRC_DIR)
@echo $(INCLUDE)
@echo $(SRC)
@echo $(OBJ)
CC = gcc
FLAGS = -g
PROJECT = test_makefile
MODULE = module1 module2
BUILD = ./build
SRC = $(wildcard *.c) $(wildcard module1/*.c) $(wildcard module2/*.c)
OBJ = $(patsubst %.c, $(BUILD)/%.o, $(SRC))
OUT = $(BUILD)/$(PROJECT).out
all : make_recursive
make_recursive: build_folder $(MODULE) $(OBJ)
$(CC) $(FLAGS) $(OBJ) -o $(OUT)
build_folder:
mkdir -p $(BUILD) $(addprefix $(BUILD)/, $(MODULE))
$(MODULE):
@$(MAKE) -C $@
$(BUILD)/%.o:%.c
mkdir -p $(BUILD)
$(CC) $(FLAGS) -c $< -o $@
clean:
rm -rf build
.PHONY: all clean build_folder $(MODULE)
CC = gcc
FLAGS = -g
MODULE = module1
OUT = ../build/$(MODULE)
SRC = $(wildcard *.c)
OBJ = $(patsubst %.c, $(OUT)/%.o, $(SRC))
.PHONY: module
module:$(OBJ)
$(OUT)/%.o : %.c
$(CC) $(FLAGS) -c $^ -o $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment