Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Dercury/Dmake

Open more actions menu

Repository files navigation

Dmake

通用C语言编译脚本

通常的编译流程包括三个步骤或阶段:配置编译环境、执行编译、发布编译结果。


1.配置编译环境

包括编译目标、待编译的源文件、需包含的头文件、编译工具链、编译选项等等。在此,编译环境配置是由configure.sh完成的。

1).configure参数选项

(1)编译目标:必须输入项,编译将要生成的结果文件,支持静态库(以.a或.o为后缀)、动态库(以.so为后缀)和可执行文件(以.exe为后缀或无后缀)三种格式。在此,通过参数--target指定。 如果没有输入该选项,则报错退出。

(2)源文件:必须输入项,待编译的源文件列表,支持源文件列表(以SRC_FILE变量指定)和源文件路径列表(以SRC_PATH变量指定)两种方式。在此,通过参数--src-file指定,要求参数为.mak文件,其内以SRC_FILE变量指定待编译的源文件列表,以SRC_PATH变量指定待编译的源文件所在的路径列表。 如果没有输入该选项,则报错退出。

(3)头文件:可选输入项,编译时包含的头文件路径列表(以INCLUDE_PATH变量指定)。在此,通过参数--include-path指定,要求参数为.mak文件,其内以INCLUDE_PATH变量指定编译包含的头文件所在的路径列表。 如果没有输入该选项,则以源文件所在路径列表为头文件路径列表。

(4)编译工具选项:可选输入项,编译时使用的编译器、链接器等工具及其选项。在此,通过参数--make-option指定,要求参数为.mak文件,其内以GCC,LD,AR等变量指定编译使用的工具,以CFLAGS等变量指定编译选项。 如果没有输入该选项,则使用linux默认编译工具链及相关选项。

(5)发布选项:可选输入项,需要发布的编译结果及发布使用的路径。在此,通过参数--release-option指定,要求参数为.mak文件,其内以RELEASE_PATH变量指定库文件或可执行文件的安装路径,以RELEASE_HFILE变量指定需发布的头文件列表,以RELEASE_HPATH变量指定需发布的头文件路径列表,以RELEASE_INCLUDE变量指定头文件的安装路径。 如果没有输入该选项,则不发布。

(6)汇总输入:由于以上输入都是以.mak文件为输入参数,所以增加参数--all-config支持输入一个汇总的.mak文件。

除了以上编译配置项之外,为了使用户能够更方便灵活的执行一些额外处理动作,增加了以下可选的输入参数:

(7)额外配置:可选输入项,通过参数--ext-config指定一个.sh脚本,在配置编译环境阶段最后执行,即configure.sh脚本最后调用输入的.sh脚本; 如果没有输入该选项,则不执行。

(8)额外编译:可选输入项,通过参数--ext-make指定一个.sh脚本,在执行编译阶段最后执行,即do_make.sh脚本最后调用输入的.sh脚本; 如果没有输入该选项,则不执行。

(9)额外发布:可选输入项,通过参数--ext-release指定一个.sh脚本,在发布编译结果阶段最后执行,即release.sh脚本最后调用输入的.sh脚本。 如果没有输入该选项,则不执行。

2).configure主要内容

configure.sh需要完成的工作包括:

(a).解析输入参数;

(b).检查是否缺少必须输入项;

(c).补齐缺少的可选输入项;

(d).判断编译目标的类型;

(e).调用额外配置脚本;


2.执行编译

根据输入参数执行编译。在此,由do_make.sh完成,其需要完成的工作包括:

(a).根据编译目标类型进行编译;

(b).调用额外编译脚本;


3.发布编译结果

完成搜集发布件(库文件及其头文件)、安装发布件等工作。在此,由release.sh完成,其需要完成的工作包括:

(a).根据编译目标类型进行发布;

(b).调用额外发布脚本;


其他

test目录

包含一个测试dmake脚本的demo工程。这个工程实现的功能非常简单:两个整数的运算。

该工程使用dmake脚本编译生成了2个静态库(handle.a,real.o),1个动态库(share.so)和1个可执行文件(main.exe)。 这些二进制文件之间的依赖关系如下:

main.exe => handle.a => share.so => real.o

具体来说,main.exe静态链接handle.a,handle.a通过dlopen动态加载share.so,share.so又静态链接real.o。

各个二进制文件和编译生成它们需要的源文件的对应关系如下:

main.exe | test/executable/main.c | test/executable/main.h

handle.a | test/static_lib/handle.c | test/static_lib/handle.h

share.so | test/dynamic_lib/share.c | test/dynamic_lib/share.h

real.o | test/static_lib/real.c | test/static_lib/real.h

About

通用C语言编译脚本

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.