makefile和bash結合編譯 執行(入門)

2021-07-26 06:47:37 字數 1141 閱讀 2434

有乙個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 編...