Makefile自动化脚本封装

目录

 一、自动生成Makefile

step1 : autoscan

step2 :aclocal        

step3 : autoheader

step4 : 创建Makefile.am并编辑

step5:Makefile.in

step6 : autoconf

step7 :  ./configure

二、Makefile脚本封装 

2.1 脚本使用

2.2 Shell命令小结

(1) shell参数获取

(2) 修改文件中的指定内容

(3) 向文件写入内容

三、总结

脚本下载链接

 一、自动生成Makefile

         由于Makefile的各种显式,隐式规则,导致我们手动写一个Makefile文件变得更加困难了,但我们可以autotools自动生成Makefile。该工具可以通过扫描源文件,自动生成一个Makefile文件。其流程大致如下:

Makefile自动化脚本封装_第1张图片

step1 : autoscan

        在我们编写好源文件后,我们就可以通过autoscan命令对该目录进行扫描,生成

configure.scan文件。如下图所示:

 这里configure.scan其实是一个模板文件,我们需要手动修改一下其内容,并将其改名为

configure.ac。修改后的内容如下图所示。

Makefile自动化脚本封装_第2张图片

step2 :aclocal        

        直接执行aclocal命令即可生成aclocal.m4文件,如下图所示。

        aclocal.m4是一个宏定义文件,该文件内容的生成依赖于configure.ac文件。aclocal会根据

confgure.ac文件的内容,搜索本地m4文件,然后生成一个在本目录下面使用的aclocal.m4文件。

step3 : autoheader

        可直接利用autoheader生成config.h.in文件,该文件也是一个模板文件,后面会利用该文件生

成config.h文件。

step4 : 创建Makefile.am并编辑

step5:Makefile.in

        利用automake --add-missing生成,如下图所示。

step6 : autoconf

        利用autoconf生成configure文件

        我们完成了生成Makefile的所有准备工作,然后我们在该目录下面运行configure脚本,即可生

成Makefile文件。

step7 :  ./configure

Makefile自动化脚本封装_第3张图片

        至此,Makefile自动创建完毕。

最后我们可以验证一下,如下图所示。

Makefile自动化脚本封装_第4张图片

二、Makefile脚本封装 

        本部分将上述的七个步骤封装在了一个.sh中,只需要执行一个.sh文件便可自动完成真正意义上的自动生成Makefile文件了。

2.1 脚本使用

        假设脚本名称为test.sh,需要编译的文件名称为test.c,则只需要在当前目录下执行"./test.sh 

test.c"即可,脚本的具体代码如下图所示:

#! /bin/bash
var_c=$1
var=${var_c%%.c}
version=1.0
varMail="[email protected]"

# Step1
rm -rf configure.ac
autoscan
sed -i "s/\[FULL-PACKAGE-NAME\]/${var}/g" configure.scan
sed -i "s/\[VERSION\]/${version}/g" configure.scan
sed -i "s/\[BUG-REPORT-ADDRESS\]/${varMail}/g" configure.scan
varLine1=$(sed -n -e "/AC_CONFIG_SRCDIR/=" configure.scan)
varLine2=$(sed -n -e "/AC_CONFIG_HEADERS/=" configure.scan)
sed -i "${varLine1}cAC_CONFIG_SRCDIR($var_c)" configure.scan
sed -i "${varLine2}aAM_INIT_AUTOMAKE(${var}, ${version})" configure.scan
sed -i "s/^AC_CONFIG_FILES/#&/g" configure.scan
sed -i "s/AC_OUTPUT/AC_OUTPUT(Makefile)/g" configure.scan
mv configure.scan configure.ac

# Step2
aclocal

# Step3
autoheader

# Step4
rm -rf Makefile.am
touch Makefile.am
src=$(ls *.c)
echo "AUTOMAKE_OPTIONS=foreign" >> Makefile.am
echo "bin_PROGRAMS=${var}" >> Makefile.am
echo -n "${var}_SOURCES=" >> Makefile.am
echo ${src} >> Makefile.am

# Step5
automake --add-missing

# Step6
autoconf

# Step7
./configure

2.2 Shell命令小结

        由于本人也是第一次正式学习shell编程,所以接下来对shell的常用指令进行简单总结。具体的教程读者可参考Shell 教程 | 菜鸟教程进行系统学习。

(1) shell参数获取

        shell使用"$"读取参数,新建一个test.sh文件,如下所示

#!/bin/bash
echo "shell 名称 = $0"
echo "参数1 = $1"
echo "参数2 = $2"

 执行脚本:”sh test.sh  1 2“,则输出结果为:

shell 名称 = test.sh
参数1 = 1
参数2 = 2

【注】$0为脚本本身,$n为第n个参数 。

(2) 修改文件中的指定内容

        若想将test.txt文件中的oldString修改为newString,则执行命令:

        sed -i "s/oldString/newString/g" test.txt.

实例:对于一个test.txt文件,执行:sed -i "s/Airoha/ZixiangXu/g" test.txt。

执行前test.txt内容:

执行后test.txt内容:

 (3) 向文件写入内容

        若想向test.txt写入内容,使用echo命令即可。

实例:向test.txt写入”Hello World!“,则执行:echo "Hello World!" >> test.txt.

执行前test.txt内容为:

执行后test.txt内容为:

三、总结

        在整个过程中我们只需要手动修改或者创建2个文件,而且修改的内容很少。最后我们就可以

得到一个完整的Makefile文件。对于大型的软件项目,这种方法无疑是非常有效的。

你可能感兴趣的:(linux,1024程序员节)