使用Shell脚本编译运行C++源码 输入输出重定向

  在写C++控制台程序的时,如果使用Xcode或者Visual Studio之类的IDE,需要创建许多工程,会造成很多不便。有时,采用Vim或者Sublime text等编辑器编写简单的控制台程序能节省许多时间。但是,在编译时,就必使用命令行编译运行。这时,一个事先编写好的shell脚本能大大缩短调试时间。 

  把下面的代码复制并保存为xxx.sh文件,输入要编译的文件名(不包括后缀)和编译选项(可选),即可运行(Linux或者MacOS系统)。

 1 ##/bin/bash
 2 echo "------------------compile.sh------------------"
 3 
 4 name=''
 5 sname=''
 6 option='0'        #0: debug | 1: normal
 7 basepath=$(cd `dirname $0`; pwd)    #获取当前路径
 8 
 9 while [[ true ]]; do
10     #statements
11     read name option        #获取输入
12     if [[ sname == '' && name == '' ]]; then
13         echo "Error: Wrong input"
14         continue
15     fi
16     
17     if [[ -z "$name" ]]; then        #没有输入的时候直接运行
18         echo "------------------runnning------------------"
19         $basepath/$sname.out
20         continue
21     fi
22 
23     sname=$name
24 
25     if [[ option -eq '0' ]]; then
26         echo "------------------compiling------------------"
27         if [[ -f "$basepath/$name.out" ]]; then
28             rm -f "$basepath/$name.out"
29         fi
30         g++ -o $basepath/$sname.out -D debug $basepath/$sname.cpp    #编译选项Debug
31         echo "------------------runnning------------------"
32         time $basepath/$sname.out                      #统计运行时间
33     fi
34     if [[ option -eq '1' ]]; then
35         echo "------------------compiling------------------"
36         if [[ -f "$basepath/$name.out" ]]; then
37             rm -f "$basepath/$name.out"
38         fi
39         g++ -o $basepath/$sname.out $basepath/$sname.cpp
40         echo "------------------runnning------------------"
41         $basepath/$sname.out
42     fi
43 done

  程序在Debug时,不仅可以用#ifdef debug包含各种中间变量的输出,还可以包括输入输出重定向。

#ifdef debug
  freopen("test.in","r",stdin);
  freopen("test.out","w",stdout);
#endif

 

posted @ 2019-01-18 22:03  SaltyFishQF  阅读(1740)  评论(0编辑  收藏  举报