有乙個test.c的原始檔,需要編譯和執行,可以使用如下的makefile和指令碼來進行操作
#include
int main(int argc, char *argv)
printf("test ....\n");
return 0;
#makefile
#makefile指令碼
#makefile指令碼的規範,依賴關係,執行命令
test: test.o
gcc -o test test.o
test.o:test.c
gcc -o test.o -c test.c
#bash自動編譯和執行的指令碼
#檔名稱:make_run.sh
#----------------------------bash指令碼開始-----------------------------------
#! /bin/bash
#校驗輸入目標是否存在
if [ -z $1 ]
then
echo "usage: make_run.sh "
echo "------compile and run-----------"
exit -1
fi#如果目標檔案(可執行檔案)的日期比原始檔*.c檔案的日期老,或者檔案不存在,則重新make編譯生成
cfile="$1.c"
echo "原始檔是:$cfile"
if [ $1 -ot $cfile ] || [ -e $1 ]
then
#編譯目標
make $1
#如果目標檔案不存在,編譯失敗,則報錯
if [ ! -e $1 ]
then
echo "$1生成失敗"
exit -2
#生成成功
else
#檢查檔案是否具備可執行許可權,如果沒有則修改許可權
if [ ! -x $1 ]
then
chmod +x $1
fi#編譯執行成功,直接執行目標程式
./$1
fifi
#----------------------------bash指令碼結束-----------------------------------
bash變數和運算
簡單變數 在 bash 中變數定義是不需要的,沒有 int i 這樣的定義過程。如果想用乙個變數,只要他沒有在前面被定義過,就直接可以用,當然你使用該變數的第一條語句應該是對他賦初值了,如果你不賦初值也沒關係,只不過該變數是空 注意 是 null,不是 0 不給變數賦初值雖然語法上不反對,但不是乙個...
Makefile 例子和分析
dir inc inc dir src src dir obj obj dir bin bin src wildcard c obj patsubst c,o,notdir target main bin target cc gcc cflags g wall i cc obj o o c cc c...
編譯過程和makefile
預編譯 g e test.c o test.i 則做了以下處理 刪除所有 define,並展開所有巨集定義 處理所有條件預編譯指令,如 ifdef等 處理 include 預編譯指令,把 include 標頭檔案中的函式都宣告都扔進來 去掉所有的注釋 新增行號,編譯gdb除錯 保留 pragma 編...