(1)构建算法库(静态/动态)
(2)构建库测试执行体
由此,设计两个markfile文件,sub.mk用以构建算法库,Makefile用以构建执行体。
2. 构建执行体脚本项目的目录设计参考如下
----build(存放编译工具)
----include(库头文件)
----src(代码文件夹)
--------app(执行体代码)
--------core(库代码)
--------sub.mk
----Makefile
----libxxx.so
----xxx.exe
Makefile
TARGET = xxx CC = gcc.exe AR = ar.exe BUILD_TIME = $(shell date "+%Y-%m-%d-%H-%M-%S.%N" | cut -b 1-23) BUILD_BRANCH = $(shell git branch | grep * | cut -d ' ' -f2) BUILD_LATEST_COMMIT = $(shell git log --oneline -1 | cut -d ' ' -f1) CFLAGS = -DBUILD_ENV=""$(HOST_TAG)"" -DBUILD_TIME=""$(BUILD_TIME)"" -DBUILD_BRANCH=""$(BUILD_BRANCH)"" -DBUILD_LATEST_COMMIT=""$(BUILD_LATEST_COMMIT)"" CFLAGS += -DMULTI_THREAD_SUPPORT CFLAGS += -DDEBUG_TIME # print running time #CFLAGS += -g -fstack-protector-strong -fsanitize=address -fsanitize=leak -fsanitize=undefined -fno-omit-frame-pointer #LDLIBS += -fsanitize=address include ./src/sub.mk SOURCE = src/app/test_main.c src/app/test_parameters.c OBJ = $(patsubst %.c, %.o, $(SOURCE)) INCLUDE = -I include -I src/app -I src/core $(TARGET): $(OBJ) $(CC) -std=c99 -W $(OBJ) $(LIB_PATH) $(LIBS) $(CFLAGS) -lm -lpthread -o $(TARGET).exe %.o: %.c $(CC) -g -W -std=c99 -c $< -o $@ $(INCLUDE) $(CFLAGS) all: xxxlib xxxdll xxxexe cleanall: libclr clean .PHONY: clean clean: del $(subst /,,$(OBJ)) $(TARGET).exe3. 构建库脚本
sub.mk
TARGET = libxxx LIB = libxxx.a XXX_DLL = libxxx.so XXX_DIR = lib XXX_SRC = $(wildcard src/core/*.c src/utility/*.c src/neon/*.c) XXX_OBJ = $(patsubst %.c, %.o, $(XXX_SRC)) LIB_PATH += -L ./$(XXX_DIR) LIBS += -l:$(XXX_LIB) # generate static library xxxlib:$(XXX_OBJ) $(AR) cq $(XXX_DIR)/$(XXX_LIB) $^ # generate shared library xxxdll:$(XXX_OBJ) $(CC) -fPIC -shared -o $(XXX_DIR)/$(XXX_DLL) $^ .PHONY: libclr libclr: del $(XXX_DIR)$(XXX_DLL) del $(XXX_DIR)$(XXX_LIB) ifneq (,$(subst /,,$(XXX_OBJ))) del $(subst /,,$(XXX_OBJ)) endif4. bat脚本
在windows平台上编写bat脚本,方便快速执行构建命令,同理,在Linux平台可以编写sh脚本。
4.1 buildall.batset PATH=%cd%buildwindowsbin;%cd%buildwindowslibexecgccx86_64-w64-mingw328.1.0; set LIBRARY_PATH=%cd%buildwindows_64x86_64-w64-mingw32lib; set LD_RUN_PATH=%cd%buildwindows_64x86_64-w64-mingw32lib; set C_INCLUDE_PATH=%cd%buildwindowsinclude;%cd%buildwindowslibgccx86_64-w64-mingw328.1.0include; %cd%buildwindowsbinmingw32-make.exe cleanall %cd%buildwindowsbinmingw32-make.exe all pause4.2 buildclean.bat
set BUILDPATH=%cd%buildwindowsbin;%cd%buildwindowslibexecgccmingw32\9.2.0; set PATH=%BUILDPATH% PATH %cd%buildwindowsbinmingw32-make.exe cleanall pause
参考:
《跟我一起写Makefile》



