用Shell脚本实现 C++多目录编译

15 篇文章 0 订阅
#!/bin/bash
#compile.sh


cd `dirname $0`

currentPath=`pwd`

result=''

#设置生成的可执行文件名字,可以从外部传入 ./compile.sh start
appName=''
if [ "X$1" != 'X' ]
then
  appName=$1
else
  appName='Start.out'
fi
   

function ReadAllFileName()
{
  if [ "X$1" != 'X' ]
   then
         cd "$1"
  fi
  
  files=`ls`
for filename in $files;do
	
	if [ -d $filename ]
    	then
		#echo  "文件夹 $filename "
	        #递归	
		ReadAllFileName $filename 
			
	else

	if [ ${filename##*.} = 'cpp' ] || [ ${filename##*.} = 'c' ] || [ ${filename##*.} = 'cxx' ]
	 then
		#去除入口程序
		# if [[ $filename =~ 'server'  ]]
		# then
		#	continue
		#fi

		#	echo $filename
		#	echo `pwd`
			tmp=`pwd`"/"$filename
		  result=${result}" "$tmp
	fi
	
	fi
done
	cd ..	
}

ReadAllFileName


 echo  '开始编译..........'
 
#下面用到相对,会以这个路径作为参考
 cd $currentPath

#echo "result="$result
#把.c .cpp后缀的文件替换成同名的.o文件
resultofile=${result//.cpp/.o}
resultofile=${resultofile//.cxx/.o}
resultofile=${resultofile//.c/.o}


#去除 .o文件前面的路径,因为生成的.o文件和本脚本在同目录(没有cd $currentPath 到当前目录,结果也是一样)
current_o_file=''
for ofile in $resultofile
do
	current_o_file=${current_o_file}" "${ofile##*/}
done

echo "生成的.o文件o_file= "$current_o_file

#第一种方式 Begin--------------------------- 
# 先把所有.c .cpp编译成 .o文件 在编译成可执行文件

#在当前目录currentPath 生成对应的.o文件
for item in $result
do
	#因为入口程序server.cpp 需要加上包含的目录 -I ./depends/include -I ./depends/json -std=c++11 -pthread
	# ,不单独编译入口程序server.cpp,所以都加上,省事
	g++ -c $item   -I ./depends/include -I ./depends/json -std=c++11 -pthread
 
	#echo $item
done

#单独编译入口程序 server.cpp
#g++ -c server.cpp -I ./depends/include -I ./depends/json -std=c++11 -pthread 

#把.o文件 链接成可执行文件
g++ $current_o_file  -std=c++11 -pthread  -o $appName

#----------------------------第一种方式 End--------------------------------

#第二种方式 Begin --------------------
 # 
 #$result 所有的.c .cpp 文件
 #-I ./depends/include  ./depends/json 包含的头文件路径
 #-std=c++11 -pthread  编译选项
 # -o start  生成的可执行文件
 #

#g++  \
#$result  \
#-I ./depends/include \
#-I ./depends/json \
#-std=c++11 -pthread \
#-o $appName
#------------------------第二种方式 End-----------------------------------------------
                                            
# 删除目录下所有.o文件                                           
 find . -name '*.o' -delete
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值