linux sh : 批量编译工程的脚本模板

前言

前段时间,正在干活的时候,同事让我帮忙编译一版程序。有点顾不上。
后来想想,要写一个批量编译工程的脚本,就方便了。可以将一个系列的软件源码工程都编译出来, 将编译后的工程输出都拷贝到一个临时输出目录,也不用人管,只要编译从svn迁出的工程,都可以编译过的。等编译完了, 直接将临时输出目录给同事就可以了.
在做这个脚本时,学到了只判断文件不存在的脚本写法.

if [ ! -f ./obj_file ]
then
    echo "file obj_file not exist"
fi

整理后的批量编译工程的脚本模板

还可以整的复用性强些, 代码再规范些.
不过考虑到,每个工程的编译过程,写好了,一般都是不变的, 每新增一个新工程,用拷贝粘贴也说的过去.

#/bin/bash
# @file build_all_project_template.sh

declare -r MY_RC_OK=0
declare -r MY_RC_ERR=1

declare g_param_0="$0"
declare g_dir_cur="$(readlink -f $(dirname "$0"))"
declare g_dir_prev="$(pwd)"
declare g_dir_output="${g_dir_cur}/output_dir"

function shfn_main() {
    printf "g_param_0 = %s\n" "${g_param_0}"
    printf "g_dir_cur = %s\n" "${g_dir_cur}"
    printf "g_dir_prev = %s\n" "${g_dir_prev}"

    shfn_build_all_prj

    return ${MY_RC_OK}
}

function shfn_build_all_prj() {
    echo ">> shfn_build_all_prj"

    while true
    do
        printf "g_dir_output = %s\n" ${g_dir_output}
        mkdir -pv ${g_dir_output}
        rm -v -f ${g_dir_output}/*
        # shfn_press_any_key_to_continue

        # --------------------------------------------------------------------------------
        # create readem file
        # --------------------------------------------------------------------------------
        touch ${g_dir_output}/readme
        echo -e "create by build_all_project_template.sh" > ${g_dir_output}/readme
        echo -e $(date "+%Y-%m-%e %H:%M:%S") >> ${g_dir_output}/readme
        echo -e $(pwd) >> ${g_dir_output}/readme

        # --------------------------------------------------------------------------------
        # build prj1
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj1/1.1.0.0/src
        make rebuild
        cd ${g_dir_cur}

        # shfn_press_any_key_to_continue
        if [ ! -f ./prj1/1.1.0.0/src/prj1 ]
        then
            echo "maybe build failed"
            break
        fi

        cp ./prj1/1.1.0.0/src/prj1 ${g_dir_output}

        # --------------------------------------------------------------------------------
        # build prj2
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj2/1.1.0.0/src
        make rebuild
        cd ${g_dir_cur}

        if [ ! -f ./prj2/1.1.0.0/src/prj2 ]
        then
            echo "maybe build failed"
            break
        fi

        # --------------------------------------------------------------------------------
        # build prj3
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj3/1.1.0.0
        make clean
        make

        cd ${g_dir_cur}

        if [ ! -f ./prj3/1.1.0.0/prj3 ]
        then
            echo "maybe build failed"
            break
        fi

        cp ./prj3/1.1.0.0/prj3 ${g_dir_output}

        # --------------------------------------------------------------------------------
        # build prj4
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj4/1.0.0.0/src
        make rebuild

        cd ${g_dir_cur}

        if [ ! -f ./prj4/1.0.0.0/src/prj4 ]
        then
            echo "maybe build failed"
            break
        fi

        cp ./prj4/1.0.0.0/src/prj4 ${g_dir_output}

        # --------------------------------------------------------------------------------
        # build prj5
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj5/src
        make rebuild

        cd ${g_dir_cur}

        if [ ! -f ./prj5/src/prj5 ]
        then
            echo "maybe build failed"
            break
        fi

        cp ./prj5/src/prj5 ${g_dir_output}

        # --------------------------------------------------------------------------------
        # build prj6
        # --------------------------------------------------------------------------------
        cd ${g_dir_cur}

        cd ./prj6/1.1.0.0/src
        make -f Makefile_pf_ring rebuild

        cd ${g_dir_cur}

        if [ ! -f ./prj6/1.1.0.0/src/prj6 ]
        then
            echo "maybe build failed"
            break
        fi

        cp ./prj6/1.1.0.0/src/prj6 ${g_dir_output}

        # --------------------------------------------------------------------------------
        # after build ok all, show output files
        # --------------------------------------------------------------------------------
        printf "all project ouput files on : %s\n" ${g_dir_output}
        ls -lF --color ${g_dir_output}

        echo "all project build ok"
        break
    done

    echo "<< shfn_build_all_prj"
}

function shfn_press_any_key_to_continue() {
    declare user_input=""

    read  -n 1 -p "press any key to continue" user_input
}

shfn_main
exit ${MY_RC_OK}

猜你喜欢

转载自blog.csdn.net/lostspeed/article/details/80079049