用于编译和生成C文件输出的Shell脚本文件

时间:2013-03-01 12:32:25

标签: c unix gcc g++

我写了这个.sh文件来编译任何c源文件,所以当我运行它时,它要求输入文件名,gcc编译它然后运行可执行文件a.out。

但是当.c文件中存在错误时,这不能正常工作。它还显示a.out不存在。我不希望出现此错误消息(a.out不存在),但只想打印为.c文件生成的错误消息..

这是脚本..

echo `clear`
echo enter file name
read FILE
gcc $FILE
./a.out
echo -e '\n'

5 个答案:

答案 0 :(得分:2)

如果在shell脚本中启用abort-on-error,生活将变得更加轻松:

#!/bin/sh
set -eu # makes your program exit on error or unbound variable
# ...your code here...

答案 1 :(得分:2)

利用内置规则替代脚本,您可能希望使用make作为手工脚本的替代方案。要编译file.c并运行生成的可执行文件,您需要做的就是:

make file && ./file

如果您不知道,我强烈建议您查看make实用程序,因为它会让您的工作变得更轻松。如果没有它,管理任何超过一个文件项目的东西都会变得非常糟糕。

答案 2 :(得分:1)

您可以链接编译和执行命令:

echo `clear`
echo enter file name
read FILE
gcc $FILE && ./a.out
echo -e '\n'

这里,如果gcc失败,shell将删除./a.out命令。

答案 3 :(得分:1)

您也可以使用双引号保护文件名:

#! /bin/bash
clear
echo -n "Enter file name: "
read FILE
gcc -Wall -W "$FILE" && ./a.out
echo

答案 4 :(得分:0)

我希望这是你所看到的只需要这个命令:

  

./ compile executableName myCProgram.c -lm

您可以将更多C文件放在彼此之前,并在行尾添加更多库,且executableName不需要.exe

#!/bin/bash
args="$@"
quant=$#

#Copies in case you need the -lm(math library) params
biblio=${args#*-}
#grabs all params except the first one which should be the name of the executable
firstCommand=${*:2:${#args}}
#Remove the "-lm -lc" from firstCommand
firstCommand=${firstCommand%%-*}

printf "\nEXECUTING: gcc -W -Wall -c $firstCommand\n"

#Creates the object file ".o"
gcc -W -Wall -c $firstCommand

#Convert the files names from example.c to example.o
args=${args//.c/.o}
printf "\nEXECUTING: gcc -o $args\n\n"

#Creates the executable
gcc -o $args

printf "\n**Now execute comand: ./$1  **\n\n"