shell 脚本编译静态库
来源:互联网 发布:网站源码cmzy168 编辑:程序博客网 时间:2024/05/16 10:48
lib-build
本文引用了webfrogs 的脚本,进行更改后使用 原脚本地址
#!/bin/bash#--------------------------------------------# 功能:编译static lib xcode项目# 使用说明:# 编译project# lib-build <project directory> [-c <project configuration>] [-o <lib output directory>] [-t <target name>] [-n]# 编译workspace# lib-build <workspace directory> -w -s <schemeName> [-c <project configuration>] [-n]## 参数说明: -c NAME 工程的configuration,默认为Release。# -o PATH 生成的lib文件输出的文件夹(必须为已存在的文件路径)默认为工程根路径下的”build/lib-build“文件夹中# -t NAME 需要编译的target的名称# -w 编译workspace # -s NAME 对应workspace下需要编译的scheme# -n 编译前是否先clean工程# -m 是否编译模拟器# 作者:zeb# E-mail:zebbey@gmail.com# 创建日期:2014/10/14# ---------------------# --修改人: MinLison----# --修改功能: 增加模拟器编译选项----# --修改日期: 2016/6/14----if [ $# -lt 1 ];then echo "Error! Should enter the root directory of xcode project after the lib-build command." exit 2fiif [ ! -d $1 ];then echo "Error! The first param must be a directory." exit 2fi#模拟器版本shell_path=$(pwd)#工程绝对路径cd $1project_path=$(pwd)#编译的configuration,默认为Releasebuild_config=Releasebuild_simulator=nparam_pattern=":nmc:o:t:ws:"OPTIND=2while getopts $param_pattern optname do case "$optname" in "n") should_clean=y ;; "m") build_simulator=y simulator_sdk=`$shell_path/python_sdks.py` echo $simulator_sdk ;; "c") tmp_optind=$OPTIND tmp_optname=$optname tmp_optarg=$OPTARG OPTIND=$OPTIND-1 if getopts $param_pattern optname ;then echo "Error argument value for option $tmp_optname" exit 2 fi OPTIND=$tmp_optind build_config=$tmp_optarg ;; "o") tmp_optind=$OPTIND tmp_optname=$optname tmp_optarg=$OPTARG OPTIND=$OPTIND-1 if getopts $param_pattern optname ;then echo "Error argument value for option $tmp_optname" exit 2 fi OPTIND=$tmp_optind cd $tmp_optarg output_path=$(pwd) cd ${project_path} if [ ! -d $output_path ];then echo "Error!The value of option o must be an exist directory." exit 2 fi ;; "w") workspace_name='*.xcworkspace' ls $project_path/$workspace_name &>/dev/null rtnValue=$? if [ $rtnValue = 0 ];then build_workspace=$(echo $(basename $project_path/$workspace_name)) else echo "Error!Current path is not a xcode workspace.Please check, or do not use -w option." exit 2 fi ;; "s") tmp_optind=$OPTIND tmp_optname=$optname tmp_optarg=$OPTARG OPTIND=$OPTIND-1 if getopts $param_pattern optname ;then echo "Error argument value for option $tmp_optname" exit 2 fi OPTIND=$tmp_optind build_scheme=$tmp_optarg ;; "t") tmp_optind=$OPTIND tmp_optname=$optname tmp_optarg=$OPTARG OPTIND=$OPTIND-1 if getopts $param_pattern optname ;then echo "Error argument value for option $tmp_optname" exit 2 fi OPTIND=$tmp_optind build_target=$tmp_optarg ;; "?") echo "Error! Unknown option $OPTARG" exit 2 ;; ":") echo "Error! No argument value for option $OPTARG" exit 2 ;; *) # Should not occur echo "Error! Unknown error while processing options" exit 2 ;; esac done#build文件夹路径build_path=${project_path}/build#生成的app文件目录appdirname=Release-iphoneossimulatordirname=Release-iphonesimulatorif [ $build_config = Debug ];then appdirname=Debug-iphoneosfiif [ $build_config = Distribute ];then appdirname=Distribute-iphoneosfi#编译后文件路径(仅当编译workspace时才会用到)compiled_path=${build_path}/${appdirname}#是否cleanif [ "$should_clean" = "y" ];then xcodebuild clean -configuration ${build_config}fi#组合编译命令build_cmd='xcodebuild'simulator_cmd='xcodebuild'if [ "$build_workspace" != "" ];then #编译workspace if [ "$build_scheme" = "" ];then echo "Error! Must provide a scheme by -s option together when using -w option to compile a workspace." exit 2 fi #是否编译模拟器 if [ "$build_simulator" = "y" ];then simulator_cmd=${simulator_cmd}' -sdk '${simulator_sdk} fi build_cmd=${build_cmd}' -workspace '${build_workspace}' -scheme '${build_scheme}' -configuration '${build_config}' CONFIGURATION_BUILD_DIR='${compiled_path}' ONLY_ACTIVE_ARCH=NO' simulator_cmd=${simulator_cmd}' -workspace '${build_workspace}' -scheme '${build_scheme}' -configuration '${build_config}' CONFIGURATION_BUILD_DIR='${compiled_path}' ONLY_ACTIVE_ARCH=NO'else #编译project build_cmd=${build_cmd}' -configuration '${build_config} if [ "$build_target" != "" ];then build_cmd=${build_cmd}' -target '${build_target} fi #是否编译模拟器 if [ "$build_simulator" = "y" ];then simulator_cmd=${simulator_cmd}' -sdk '${simulator_sdk} fifi#编译工程cd $project_path$build_cmd || exit#是否编译模拟器if [ "$build_simulator" = "y" ];then $simulator_cmd || exitfi#进入build路径cd $build_pathlibname=$(basename ./${appdirname}/*${build_target}.a)simulatorlibname=$(basename ./${simulatordirname}/*${build_target}.a)head_file_dir=$(basename ./${appdirname}/include/*${build_target})iphoneos_lib_dir=$output_path/lib_iphoneiphoneSimulator_lib_dir=$output_path/lib_iphoneSimulatormkdir $iphoneos_lib_dir $iphoneSimulator_lib_direcho ${build_path}if [ "$output_path" != "" ];then # 拷贝真机静态库 echo ${build_path}/${appdirname}/${libname} cp ${build_path}/${appdirname}/${libname} $iphoneos_lib_dir # 拷贝模拟器静态库 echo ${build_path}/${simulatordirname}/${libname} cp ${build_path}/${simulatordirname}/${simulatorlibname} $iphoneSimulator_lib_dir # 拷贝头文件 echo ${build_path}/${appdirname}/include/${head_file_dir}/* ${output_path} cp ${build_path}/${appdirname}/include/${head_file_dir}/* ${output_path} echo "Copy lib file successfully to the path $output_path"fiif [ "$build_simulator" = "y" ];then #合并两个lib lipocmd='lipo -create '${lipocmd}' '${iphoneos_lib_dir}/${libname}' '${iphoneSimulator_lib_dir}/${simulatorlibname}' -output '${output_path}/${libname} $lipocmdelse cp ${iphoneos_lib_dir}/${libname} ${output_path}firm -df $iphoneos_lib_dir/* $iphoneSimulator_lib_dir/*rmdir $iphoneos_lib_dir $iphoneSimulator_lib_dir
使用python解析最新的模拟器sdk
python_sdks.py
#!/usr/bin/env pythonimport reimport subprocesssdk_header_pattern = re.compile("^.*SDKs:$")sdk_switch_pattern = re.compile("^.*(-sdk)\s[a-z]+\d+\.\d+$")def run_command(cmd): return subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).communicate()input = run_command(['xcodebuild', '-showsdks'])[0] # take first element of returned tuplesdks = {}in_sdk = Falseplatform = ''for e in input.split('\n'): if sdk_header_pattern.match(e) and not in_sdk: in_sdk = True platform = e[0:e.rfind(' ')] sdks[platform] = [] if in_sdk and sdk_switch_pattern.match(e): sdk = e.split(' ')[-1] sdks[platform].append(sdk) if in_sdk and e == '': in_sdk = False del platformfor k,v in sdks.iteritems(): if k=='iOS Simulator': print v[0]#for k,v in sdks.iteritems():# print 'Platform: ', k# for e in v:# print '\t', e# print
1 0
- shell 脚本编译静态库
- 一个编译静态库的make脚本
- shell基本脚本编译
- shell脚本编译java
- shell 脚本编译c/c++
- 自动化编译shell脚本_jenkins
- shell 脚本初探基本脚本编译
- shell编译xcode打包静态/动态库之shell编译xcode
- Shell脚本的静态检查工具shellcheck
- shell编译xcode打包静态/动态库之shell基本语法
- shell脚本实现自动编译安装
- 用shc加密或者编译shell脚本
- 关于xcode编译事件shell脚本问题
- 1.shell脚本编译运行.c程序
- 如何用shell脚本编译java工程
- Maven 自动打包编译的shell脚本
- shell脚本的基础知识1:基本脚本的编译
- 第2章 基本脚本编译------------(shell脚本退出状态)
- Insertion Sort List
- 4Sum
- Reverse Linked List II
- Reorder List
- Merge k Sorted Lists
- shell 脚本编译静态库
- ssm框架实例开发
- Springer LNCS LaTeX投稿模板使用方法 How to use the Springer LNCS LaTeX template
- 动物的叫声
- 数组类运算
- 函数指针的定义和使用
- leetcode笔记--Contains Duplicate I & II & III
- 本机IIS的用法
- android几种定时器机制及区别