Skip to content

Instantly share code, notes, and snippets.

@kkallday
Last active December 26, 2017 06:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkallday/b1e856127885116bb80241020dc5150f to your computer and use it in GitHub Desktop.
Save kkallday/b1e856127885116bb80241020dc5150f to your computer and use it in GitHub Desktop.
Makefile for use with cmocka
vpath %.c ../src
CC=gcc
INCLUDE_DIRS+=-I../include
INCLUDE_DIRS+=-I$(CMOCKA_DIR)/include
CFLAGS=$(INCLUDE_DIRS)
MOCKS=list_stories print_stories get_story print_story # list of function signature to mock
LDFLAG=-L$(CMOCKA_DIR)/build/src -Wl, -rpath=$(CMOCKA_DIR)/build/src
LDFLAGS+=$(foreach MOCK,$(MOCKS),-Wl,--wrap=$(MOCK))
LDFLAGS+=-lcmocka
TARGET=test_gen
SRC=$(shell find ../src/* -type f -name '*.c' ! -name '*main.c*' -printf '%f\n')
TEST_SRC=$(shell find * -maxdepth 0 -type f -name '*.c' -print)
SRC_OBJ=$(patsubst %.c,obj/%.o,$(SRC))
TEST_OBJ=$(patsubst %.c,obj/%.o,$(TEST_SRC))
OBJ_DIR=obj
CMOCKA_TAR=cmocka-1.1.1.tar.xz
CMOCKA_DIR=cmocka
all: $(CMOCKA_DIR) $(TARGET)
./$(TARGET)
$(SRC_OBJ): | $(OBJ_DIR)
$(OBJ_DIR):
mkdir -p $@
$(OBJ_DIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
$(TARGET): $(SRC_OBJ) $(TEST_OBJ)
$(CC) -o $@ $^ $(LDFLAGS)
$(CMOCKA_DIR):
mkdir -p $@
tar -xf $(CMOCKA_TAR) -C $@ --strip-components 1
mkdir -p $@/build
@(cd $@/build && cmake ../ && make -s)
clean:
rm -rf $(TARGET) $(OBJ_DIR) $(CMOCKA_DIR)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment