Makefile和shell指令碼簡單編寫
- CROSS =/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-
- #CROSS =
- SRCDIRS =./ \
- ./include\
- ./src\
- ./gsoap\
- ASFLAGS =
- CFLAGS =-Wall
- CXXFLAGS =-O2
- LDFLAGS =
- ARFLAGS =
- OCFLAGS =
- ODFLAGS =
- INCDIRS =-I../include -I../fcCommon -I./gsoap
- LIBDIRS =-L../../../lib/../../../lib/libfcMsgClient.a ../../../lib/libfcCommon.a ../../../
- LIBS =-lpthread -lm
- #
- ### You shouldn't need to change anything below this point.
- #
- ##
- #AS = $(CROSS)as
- CC = $(CROSS)gcc
- CXX = $(CROSS)g++
- LD = $(CROSS)gcc
- AR = $(CROSS)ar
- OC = $(CROSS)objcopy
- OD = $(CROSS)objdump
- ST = $(CROSS)strip
- RM =-rm -fr
- #notdir 會取出當前目錄的目錄名
- NAME := $(notdir $(CURDIR))
- #foreach 遞迴取出所有的檔案
- SFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))
- CFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
- CPPFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.cpp))
- RMFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*~))
- RMFILEO := $(foreach dir
- #$(SFILES:.s=.o) 將所有的.s檔案轉換成.o檔案
- OBJS := $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
- DEPS := $(OBJS:.o=.d)
- VPATH := $(SRCDIRS)
- #建一個虛擬的目標
- .PHONY: all rebuild clean
- all:
- @$(MAKE) $(NAME)
- rebuild:
- @$(MAKE) clean
- @$(MAKE) $(NAME)
- $(NAME): $(OBJS)
- @echo test linking ...
- # $(LD) $(LDFLAGS) $(LIBDIRS) -o [email protected] $^ $(LIBS)
- # $(LD) $(LDFLAGS) -o [email protected] $^ $(LIBS) $(LIBDIRS)
- $(CXX) $(LDFLAGS)-o fcOnvif -DWITH_PURE_VIRTUAL $^ $(LIBS) $(LIBDIRS)
- $(ST)-g --strip-unneeded fcOnvif
- cp fcOnvif /mnt/nfs
- # cp armok /tftpboot/
- #把當前所有依賴的.s檔案編譯成.o檔案
- %.o:%.s
- @echo assembling $<...
- $(AS) $(ASFLAGS) $(INCDIRS) $<-o [email protected]
- %.o:%.c
- @echo test compiling $<...
- $(CC) $(CFLAGS) $(INCDIRS)-c $<-o [email protected]
- %.o:%.cpp
- @echo compiling $<...
- $(CXX)-DWITH_PURE_VIRTUAL $(CXXFLAGS) $(INCDIRS)-c $<-o [email protected]
- %.d:%.c
- @$(CC) $(CFLAGS) $(INCDIRS)-MM $^-o [email protected].tmp
- @sed's,$(basename $(notdir [email protected])).o[ :]*,$(@:.d=.o) [email protected] : ,g' [email protected].tmp > [email protected]
- @$(RM) [email protected].tmp
- %.d:%.cpp
- @$(CXX) $(CXXFLAGS) $(INCDIRS)-MM $^-o [email protected].tmp
- @sed's,$(basename $(notdir [email protected])).o[ :]*,$(@:.d=.o) [email protected] : ,g' [email protected].tmp > [email protected]
- @$(RM) [email protected].tmp
- ifeq (mach/mach,)
- -include $(DEPS)
- endif
- clean:
- @$(RM) $(OBJS) $(DEPS) $(NAME) $(RMFILES) $(RMFILEO)
- @echo clean completed
1、wildcard : 擴充套件萬用字元
2、notdir : 去除路徑
3、patsubst :替換萬用字元
- 例子:
- 建立一個測試目錄,在測試目錄下建立一個名為sub的子目錄
- $ mkdir test
- $ cd test
- $ mkdir sub
- 在test下,建立a.c和b.c2個檔案,在sub目錄下,建立sa.c和sb.c2 個檔案
- 建立一個簡單的Makefile
- src=$(wildcard *.c ./sub/*.c)
- dir=$(notdir $(src))
- obj=$(patsubst %.c,%.o,$(dir))
- all:
- @echo $(src)
- @echo $(dir)
- @echo $(obj)
- @echo"end"
- 執行結果分析:
- 第一行輸出:
- a.c b.c ./sub/sa.c ./sub/sb.c
- wildcard把指定目錄./和./sub/下的所有後綴是c的檔案全部展開。
- 第二行輸出:
- a.c b.c sa.c sb.c
- notdir把展開的檔案去除掉路徑資訊
- 第三行輸出:
- a.o b.o sa.o sb.o
自動化變數$?代表依賴檔案列表中被改變過的所有檔案。 自動化變數$^代表所有通過目錄搜尋得到的依賴檔案的完整路徑名(目錄 + 一般檔名)列表。 自動化變數[email protected]代表規則的目標。 自動化變數$<代表規則中通過目錄搜尋得到的依賴檔案列表的第一個依賴檔案。 自動化變數$(@D) The directory part of the file name of the target, with the trailing slash removed. If the value of ‘[email protected]’ is dir/foo.o then ‘$(@D)’ is dir. This value is . if ‘[email protected]’ does not contain a slash. (目標檔名的目錄部分, 並刪除尾部斜槓。 如果'$ @'的值是dir / foo.o 那麼'$(@ D)'是dir。 此值為。 如果'$ @'不包含斜槓。) 自動化變數$(@F) The file-within-directory part of the file name of the target. If the value of ‘[email protected]’ is dir/foo.o then ‘$(@F)’ is foo.o. ‘$(@F)’ is equivalent to ‘$(notdir [email protected])’. (檔案內目錄部分的檔名為目標。 如果'$ @'的值是dir / foo.o,那麼'$(@ F)'是foo.o。 '$(@ F)'相當於'$(notdir $ @)'。) 來源: http://blog.chinaunix.net/uid-20564848-id-217918.htmlLinux shell 下迴圈讀取檔案test.txt的方式。(3種)
- #!/bin/bash
- printf "*************************************\n"
- echo " cat file whiel read line"
- cat test.txt |while read line
- do
- echo $line;
- done
- printf "*************************************\n"
- echo "while read line <file"
- while read line
- do
- echo $line;
- done<test.txt
- printf "*************************************\n"
- echo "for line in cat test.txt"
- SAVEIFS=$IFS
- IFS=$(echo -en "\n")
- for line in $(cat test.txt)
- do
- echo $line;
- done
- IFS=$SAVEIFS
- 注意:for line in $(cat test.txt) 當檔案中有空格或者tab 時,一定要設定一下IFS變數。
相關推薦
Makefile和shell指令碼簡單編寫
CROSS =/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-#CROSS =SRCDIRS =./ \./include\./src\./gsoap\ASFLAGS =CFLAGS =-WallCX
Liunx----Shell指令碼簡單介紹 Shell執行環境和Shell變數
Shell 指令碼(shell script),是一種為 shell 編寫的指令碼程式。 Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。 Linux 的 Shell 種類眾多,常見的有: Bourne Shell(
三個簡單shell指令碼的編寫
Linux練習內容: 1.編寫shell指令碼,利用陣列存放3個字串,再利用for迴圈將它們顯示在螢幕上。 陣列不需要定義,下標從0開始,直接賦值即可,這樣賦值:arr[0]=zb 2.編寫shell指令碼,利用cat命令顯示指定目錄下的多個指定檔案,指令碼的第一個引數指
SHELL指令碼簡單的賦值與遞增
Count=`expr $Count + 1`;#可以在各種shell執行,其他類C的寫法只能在指定的bash版本執行; 賦值不能帶$, 帶$相當於字串常量了;執行指令碼參考如下 #!/bin/sh Count=1; while [ 1 -lt 2 ] do Count=`expr $Count
Linux的基礎命令和Shell指令碼
一、計算機 1、能接收使用者輸入的指令和資料,經過中央處理器的算術邏輯單元處理,然後會產生或者顯示新資料的,就是計算機。 比如,普通商戶用的計算器,手機,提款機,汽車導航,桌面電腦,手提電腦等 2、計算機
linux和shell指令碼常用命令技巧
date :調配時間,可以用date命令完成很多需求,比如日誌資料夾,比如求前幾天等等,其他常用方法百度 date "+%Y%m%d" #輸出年月日 date -d last-day +%Y%m%d #輸出當然日期的前一天 #########################
Makefile與shell指令碼區別
在Makefile可以呼叫shell指令碼,但是Makefile和shell指令碼是不同的。本文試著歸納一下Makefile和shell指令碼的不同。 1、 shell中所有引用以$打頭的變數其後要加{},而在Makefile中的變數是以$打頭的後加()。例項如下: Make
shell指令碼----簡單日記系統
#b.sh 首頁(登入介面): echo "------->haha<-------"; echo " 1、登入"; echo " 2、註冊"; echo " 3、退出"; echo read -p "" a; case "$a" in 1)
正則表示式和Shell指令碼。
正則表示式分兩類:基本正則表示式:BRE擴充套件正則表示式:EREgrep -E, egrep正則表示式引擎:採用不同演算法,檢查處理正則表示式的軟體模組PCRE元字元分類:字元匹配、匹配次數、位置錨定、分組 基本正則表示式元字元字元匹配:. 匹配任意單個字元[] 匹配指定範圍內的任意單個字元,示例:[wa
Shell指令碼簡單練習
一次Linux Shell指令碼的簡單練習 一名熱心的同事提出: 每天凌晨建立20個以“xyz_”開頭的使用者並建立密碼(不允許登陸),再生成一個一鍵刪除這些使用者的指令碼。 大概思路 建立使用者生成指令碼,crontab定時任務每天凌晨
linux中使用corntab和shell指令碼自動備份nginx日誌,按天備份
編寫shell指令碼,實現nginx日誌每天自動備份到指定資料夾! 需要的命令mv , corntab -e(定時任務),shell指令碼 這裡先說一下corntab: https://www.cnblogs.com/longjshz/p/5779215.html 這裡有一篇詳細
Shell程式設計-自定義函式和shell指令碼除錯
1.自定義函式函式代表著一個或一組命令的集合,表示一個功能模組,常用於模組化程式設計一下是關於函式的重要說明 在shell中,函式必須先定義,再呼叫 使用 return value來獲取函式的返回值 函式在當前shell中執行,可以使用指令碼中的變數函式的格
鳥哥私房菜shell和shell指令碼總結(僅自己看)
1、 cat 顯示內容,和echo寫入區別 2、 $0 為返回值 3、 &後臺執行命令,例子:程式名& 4、 echo 後邊什麼也不接當做回車使用 5、 bash是shell的一種。 6、 不打#!/bin/sh 將不能使用內建命令 7、 ec
python和shell指令碼:微信企業號傳送資訊
#!/usr/bin/python # coding: utf-8 import urllib,urllib2 import json import sys def gettoken(corpid,corpsecret): gettoken_url = 'https://qyapi.wei
linux常用命令 和shell指令碼(必知)
從工作中總結了一些非常實用的linux命令如下: 命令例項 功能 curl -I http://127.0.0.1:8088/index.jsp curl -I http://127.0.0.1:8088/index.jsp 返回200確認服務正常 sudo mv hea
shell和shell指令碼的區別
程式必須以下面的行開始(必須方在檔案的第一行):#!/bin/sh符號#!用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用/bin/sh來執行程式。當編輯好指令碼時,如果要執行該指令碼,還必須使其可執行。要使指令碼可執行:編譯 chmod +x filename 這樣才能用./filena
shell指令碼 簡單的從命令列讀取引數
$# 是傳給指令碼的引數個數 $0 是指令碼本身的名字 $1是傳遞給該shell指令碼的第一個引數 $2是傳遞給該shell指令碼的第二個引數 [email protected] 是傳
shell 指令碼簡單語法
其實是三條命令,if [ -f ~/.bashrc ]是第一條,then . ~/.bashrc是第二條,fi是第三條。如果兩條命令寫在同一行則需要用;號隔開,一行只寫一條命令就不需要寫;號了,另外,then後面有換行,但這條命令沒寫完,Shell會自動續行,把下一行接在then後面當作一條命令處理。和[命令
mongodb資料庫備份和利用shell指令碼編寫
1、指令備份 MongoDB提供了備份工具,mongodump.exe,在bin目錄下,其用法如下: mongodump.exe-hlocalhost-ddatabase_name -u use
linux動態庫及靜態庫的製作 和makefile 的簡單編寫
一.庫什麼是庫,簡單的可以說是可執行程式碼的二進位制形式,能夠被作業系統載入記憶體執行。作業系統的不同,二者的庫也是不相容的,如windows與linux.庫又分為靜態庫和動態庫,動態庫又稱為共享庫。linux下靜態庫(.a)檔案,動態庫(.so)檔案。主要存放函式庫的路徑有