栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言项目设计——GCC构建项目

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言项目设计——GCC构建项目

1. 项目需求

(1)构建算法库(静态/动态)

(2)构建库测试执行体

由此,设计两个markfile文件,sub.mk用以构建算法库,Makefile用以构建执行体。

项目的目录设计参考如下

----build(存放编译工具)

----include(库头文件)

----src(代码文件夹)

--------app(执行体代码)

--------core(库代码)

--------sub.mk

----Makefile

----libxxx.so

----xxx.exe

2. 构建执行体脚本

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).exe
3. 构建库脚本

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))
endif
4. bat脚本

在windows平台上编写bat脚本,方便快速执行构建命令,同理,在Linux平台可以编写sh脚本。

4.1 buildall.bat
set 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
pause
4.2 buildclean.bat
set BUILDPATH=%cd%buildwindowsbin;%cd%buildwindowslibexecgccmingw32\9.2.0;
set PATH=%BUILDPATH%
PATH
%cd%buildwindowsbinmingw32-make.exe cleanall
pause

参考:

《跟我一起写Makefile》

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号