shell编程例子 -- 一个makefile例子

理工大嵌入式操作系统实验报告之Shell编程和Makefile文件 一、实验目的和要求 1 了解什么是脚本 2 掌握shell编程方法 3 掌握makefile的编写规则 二、实验内容和原理 1 编写一个Shell脚本,要求:显示当前目录的所有内容,并统计可执行文件(.sh)的数量,将统计结果输入到指定的文件当中; 2 编写一个Shell脚本,要求: 2.1 在屏幕上显示一行提示信息 2.2 读入一行命令 2.3 判断此命令是否为“exit”,若是则退出 2.4 ... 阅读详情

unix.mkf
========
#=============================================================================#
# Copyright (C) BS P4 2000. All Rights Reserved. Confidential #
#=============================================================================#

#=============================================================================#
# module: unix.mkf #
# description: global include for all makefiles #
# system UNIX #
# version: 2000.08.01 #
# Author: Zhou zeyan #
#=============================================================================#

#=============================================================================#
# processline #
#=============================================================================#
PLINE = PCFC

#=============================================================================#
# useful #
#=============================================================================#
NOTHING =
BLANC = $(NOTHING) $(NOTHING)
SAY = $(BLANC)echo$(BLANC)
CONTINUE = $(BLANC)echo"">/dev/null$(BLANC)
IF = $(BLANC)if$(BLANC)
THEN = ;then$(BLANC)
FI = ;fi$(BLANC)
FSY = [ -f$(BLANC)
FSN = [ ! -f$(BLANC)
FSE = $(BLANC)]$(BLANC)
CP = cp$(BLANC)
RCP = rcp$(BLANC)
PU = echo>/dev/null<
RM = rm$(BLANC)
DTOU = dos2unix
SS =
SM1 = .*

#=============================================================================#
# home device and directory #
#=============================================================================#
DEVHOME = /
DIRHOME = home/$(PROJ)

#=============================================================================#
# global directories #
#=============================================================================#
GLOBALDOS = $(DEVHOME)$(DIRHOME)/dos/
GLOBALMKF = $(DEVHOME)$(DIRHOME)/mkf/

#=============================================================================#
# Include application mkf #
#=============================================================================#
include $(GLOBAL_MKF_HOME)$(PROJ).mkf

#=============================================================================#
# oracle directories #
#=============================================================================#
ORAINC = $(ORACLE_HOME)/precomp/public/

#=============================================================================#
# system directories #
#=============================================================================#
SYSINC = /usr/include/
SYSINC2 = /usr/include/sys/

#=============================================================================#
# file extensions #
#=============================================================================#
EXTCOM =
EXTORS = .pc
EXTSRC = .c
EXTINC = .h
EXTOBJ = .o
EXTLIB = .a
EXTSHL =
EXTBIN =
EXTLIS = .lis

#=============================================================================#
# all include pathes #
#=============================================================================#
OCALLINC = $(BLANC)include=$(GLBINC) include=$(UTLINC) include=$(COMINC) 
include=$(PKSINC) include=$(ORAINC) include=$(SIIXINC) include=$(CCMINC) 
include=$(SYSINC) include=$(SYSINC2)

#=============================================================================#
# depencies for objects #
#=============================================================================#
GLBINC_ELE = $(GLBINC)ch_names.h $(GLBINC)cgl_inc.h $(GLBINC)tele_l1.h /
$(GLBINC)tele_l2.h 
UTLINC_ELE = $(UTLINC)utl_inc.h $(UTLINC)utl_db_i.h
COMINC_ELE = $(COMINC)comp.h $(COMINC)dbgp.h
PKSINC_ELE = $(PKSINC)pks_comm.h
MVAINC_ELE =
MTINC_ELE =
ORAINC_ELE = $(ORAINC)sqlca.h
SIIXINC_ELE = $(SIIXINC)pdv_errno.h $(SIIXINC)ppx_errno.h
CCMINC_ELE = $(CCMINC)pcm_defs_u.h
SYSINC_ELE = $(SYSINC)stdio.h

#=============================================================================#
# depencies for binaries #
#=============================================================================#
GLBLIB_ELE =
UTLLIB_ELE = $(UTLLIB)libutl.a
COMLIB_ELE = $(COMLIB)libcom.a
USERLIB_ELE = $(USERLIBHOME)userlib.a
ORALIB_ELE = $(ORACLE_HOME)/lib/libsql.a
SIIXLIB_ELE =
CCMLIB_ELE = /opt/SiiXdvl/lib/libpics.a /opt/SiiXdvl/lib/libpdi.a /
/usr/lib/libnsl.so
SYSLIB_ELE = /usr/lib/libm.a
SOCKLIB_ELE = /usr/lib/libsocket.a /usr/lib/libdl.so /usr/lib/libintl.so

#=============================================================================#
# libraries for binaries #
#=============================================================================#
LIBGLB =
LIBUTL = $(BLANC)$(UTLLIB)libutl.a
LIBCOM = $(BLANC)$(COMLIB)libcom.a
LIBUSER = $(BLANC)$(USERLIBHOME)userlib.a
LIBMVA =
LIBMT =
LIBORA = $(BLANC)-L$(PROLDLIBS)
LIBSIIX =
LIBCCM = $(BLANC)/opt/SiiXdvl/lib/libpics.a /opt/SiiXdvl/lib/libpdi.a /
/usr/lib/libnsl.so.1
LIBSYS = $(BLANC)/usr/lib/libm.so
LIBSOCK = $(BLANC)/usr/lib/libsocket.so /usr/lib/libdl.so /usr/lib/libintl.so

#=============================================================================#
# Oracle Compiler #
#=============================================================================#
# name of compiler
OC = $(ORACLE_HOME)/bin/proc
# compilerflags and -switches
OCINC = include=
OCOPT = config=$(GLOBALMKF)proc.cfg

#=============================================================================#
# Compiler #
#=============================================================================#
# name of compiler
CC = /usr/bin/cc
# compilerflags and -switches
CCINC = -I
CCDEBUG = $(debug:1=-g)
# comment by zzy CCOPT = -c -DDEBUG $(CCDEBUG)
CCOPT = -c $(CCDEBUG)
# flag for objectfile
CCOBJ = -o

#=============================================================================#
# create and make library #
#=============================================================================#
# create library
CL = /usr/bin/ar -rc
# make library
ML = /usr/bin/ar -rcv
# separator between objectfiles
MLS =

#=============================================================================#
# Oracle Linker #
#=============================================================================#
# name of oracle linker
OL = cc -o
# linkerflags and -switches
OLDEBUG = $(debug:1=-g)
OLOPT = $(OLDEBUG)
# librarymark for object library
OLOL =
# librarymark for shared-library
OLSL =
# separator between objectfiles
OLS = $(BLANC)

#=============================================================================#
# Linker #
#=============================================================================#
# name of linker
LD = /usr/bin/cc
# linkerflags und -switches
LDDEBUG = $(debug:1=-g)
LDOPT = -o $(LDDEBUG)
# librarymark for object library
LDOL =
# librarymark for shared-library
LDSL =
# separator between objectfiles
LDS =

#=============================================================================#
# Copyright (C) BS P4 2000. All Rights Reserved. Confidential #
#=============================================================================#

host.mkf
========
#=============================================================================#
# Copyright (C) BS P4 2000. All Rights Reserved. Confidential #
#=============================================================================#

#=============================================================================#
# module: pcfc.mkf #
# description: application include for all makefiles #
# system UNIX #
# version: 2000.08.01 #
# Author: Zhou zeyan #
#=============================================================================#

#=============================================================================#
# USERLIB directories #
#=============================================================================#
USERLIBHOME = $(DEVHOME)$(DIRHOME)/userlib/

#=============================================================================#
# COMTCP directories #
#=============================================================================#
COMTCPHOME = $(DEVHOME)$(DIRHOME)/comtcp/
COMTCPWORKETC = $(COMTCPHOME)work/etc/
COMTCPWORKSRC = $(COMTCPHOME)work/src/
COMTCPWORKINC = $(COMTCPHOME)work/inc/
COMTCPWORKOBJ = $(COMTCPHOME)work/obj/
COMTCPWORKLIB = $(COMTCPHOME)work/lib/
COMTCPWORKBIN = $(COMTCPHOME)work/bin/
COMTCPWORKLIS = $(COMTCPHOME)work/src/
COMTCPSRC = $(COMTCPHOME)work/src/
COMTCPLIS = $(COMTCPHOME)work/src/
COMTCPETC = $(COMTCPHOME)etc/
COMTCPINC = $(COMTCPHOME)inc/
COMTCPOBJ = $(COMTCPHOME)obj/
COMTCPLIB = $(COMTCPHOME)lib/
COMTCPBIN = $(COMTCPHOME)bin/

#=============================================================================#
# Copyright (C) BS P4 2000. All Rights Reserved. Confidential #
#=============================================================================#

application.mkf
===============
#=============================================================================#
# Copyright (C) BS AG 1998. All Rights Reserved. Confidential #
#=============================================================================#

#=============================================================================#
# #
# Project : #
# BAO CRM3 CGL - Level 2 #
# #
# module name : #
# de.mkf #
# #
# Task #
# Makefile for programe de #
# #
# Author #
# Zhou zeyan #
# #
# Begin of implementation #
# Dec.31, 1998 #
# #
# Update #
# Zhou zeyan #
# #
# Update date #
# Feb.12, 1999 #
# #
# Release #
# Version 1.00 #
# #
# Definition #
# make -f de.mkf #
# #
# Parameters #
# No parameters #
# #
# Return code #
# No return code #
# #
#=============================================================================#

#=============================================================================#
# global include #
#=============================================================================#
include $(GLOBAL_MKF_HOME)$(OS).mkf

#=============================================================================#
# directories/files #
#=============================================================================#
DOS = $(DEWORKDOS)
ETC = $(DEWORKETC)
SRC = $(DEWORKSRC)
INC = $(DEWORKINC)
OBJ = $(DEWORKOBJ)
LIB = $(DEWORKLIB)
BIN = $(DEWORKBIN)
MSC = $(DEWORKMSC)
LIS = $(DEWORKLIS)
RUNETC = $(DEETC)
RUNSRC = $(DESRC)
RUNINC = $(DEINC)
RUNOBJ = $(DEOBJ)
RUNLIB = $(DELIB)
RUNBIN = $(DEBIN)
RUNMSC = $(DEMSC)

INAM_1 = qdr_inc

SNAM_1 = qdr
SNAM_2 = qdr_list
SNAM_3 = de

ONAM_1 = $(SNAM_1)
ONAM_2 = $(SNAM_2)
ONAM_3 = $(SNAM_3)

LNAM_1 = qdr

BNAM_2 = $(SNAM_2)
BNAM_3 = $(SNAM_3)x

IMOD_1 = $(INC)$(INAM_1)$(EXTINC)

PMOD_1 = $(SRC)$(SNAM_1)$(EXTORS)
SMOD_1 = $(SRC)$(SNAM_1)$(EXTSRC)
PMOD_2 = $(SRC)$(SNAM_2)$(EXTORS)
SMOD_2 = $(SRC)$(SNAM_2)$(EXTSRC)
PMOD_3 = $(SRC)$(SNAM_3)$(EXTORS)
SMOD_3 = $(SRC)$(SNAM_3)$(EXTSRC)

OMOD_1 = $(OBJ)$(ONAM_1)$(EXTOBJ)
OMOD_2 = $(OBJ)$(ONAM_2)$(EXTOBJ)
OMOD_3 = $(OBJ)$(ONAM_3)$(EXTOBJ)

LMOD_1 = $(LIB)$(LNAM_1)$(EXTLIB)

BMOD_2 = $(BIN)$(BNAM_2)$(EXTBIN)
BMOD_3 = $(BIN)$(BNAM_3)$(EXTBIN)

LIST_1 = $(LIS)$(SNAM_1)$(EXTLIS)

RUN_IMOD_1 = $(RUNINC)$(INAM_1)$(EXTINC)
RUN_BMOD_2 = $(RUNBIN)$(BNAM_2)$(EXTBIN)
RUN_BMOD_3 = $(RUNBIN)$(BNAM_3)$(EXTBIN)
RUN_LMOD_1 = $(RUNLIB)$(LNAM_1)$(EXTLIB)

#=============================================================================#
# generate #
#=============================================================================#
all : src obj lib bin
@ $(SAY) "$(@) done !"
@ $(SAY) ""

src : $(SMOD_1) $(SMOD_2) $(SMOD_3)
@ $(SAY) "$(@) done !"
@ $(SAY) ""

obj : $(OMOD_1) $(OMOD_2) $(OMOD_3)
@ $(SAY) "$(@) done !"
@ $(SAY) ""

lib : $(LMOD_1)
@ $(SAY) "$(@) done !"
@ $(SAY) ""

bin : $(BMOD_2) $(BMOD_3)
@ $(SAY) "$(@) done !"
@ $(SAY) ""

#=============================================================================#
# sources #
#=============================================================================#
$(SMOD_1) : $(PMOD_1) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
$(SAY) "+--- make $(@) ---+"
$(OC) iname=$(PMOD_1) $(OCINC)$(INC)$(OCALLINC) oname=$(@) /
$(OCOPT)
@ $(SAY) ""

$(SMOD_2) : $(PMOD_2) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
$(SAY) "+--- make $(@) ---+"
$(OC) iname=$(PMOD_2) $(OCINC)$(INC)$(OCALLINC) oname=$(@) /
$(OCOPT)
@ $(SAY) ""

$(SMOD_3) : $(PMOD_3) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
$(SAY) "+--- make $(@) ---+"
$(OC) iname=$(PMOD_3) $(OCINC)$(INC)$(OCALLINC) oname=$(@) /
$(OCOPT)
@ $(SAY) ""

#=============================================================================#
# objects #
#=============================================================================#
$(OMOD_1) : $(SMOD_1) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
@ $(SAY) "+--- make $(@) ---+"
$(CC) $(CCOPT)$(LIS) /
$(CCINC)$(INC) $(CCALLINC) $(CCOBJ)$(@) $(SMOD_1)
@ $(SAY) ""

$(OMOD_2): $(SMOD_2) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
@ $(SAY) "+--- make $(@) ---+"
$(CC) $(CCOPT)$(LIS) /
$(CCINC)$(INC) $(CCALLINC) $(CCOBJ)$(@) $(SMOD_2)
@ $(SAY) ""

$(OMOD_3): $(SMOD_3) $(IMOD_1) /
$(GLBINC_ELE) $(UTLINC_ELE) $(COMINC_ELE) $(PKSINC_ELE) /
$(SIIXINC_ELE) $(CCMINC_ELE) /
$(ORAINC_ELE) $(SYSINC_ELE)
@ $(SAY) "+--- make $(@) ---+"
$(CC) $(CCOPT)$(LIS) /
$(CCINC)$(INC) $(CCALLINC) $(CCOBJ)$(@) $(SMOD_3)
@ $(SAY) ""

#=============================================================================#
# libraries #
#=============================================================================#
$(LMOD_1) : $(OMOD_1)
@ $(SAY) "+--- make $(@) ---+"
@ $(IF) $(FSN) $(LMOD_1) $(FSE) $(THEN) $(CL) $(LMOD_1) $(FI)
$(ML) $(LMOD_1) $(OMOD_1)
@ $(SAY) ""

#=============================================================================#
# binaries #
#=============================================================================#
$(BMOD_2) : $(OMOD_2) /
$(MTLIB_ELE) $(COMLIB_ELE) $(CCMLIB_ELE) /
$(ORALIB_ELE) $(SYSLIB_ELE)
@ $(SAY) "+--- make $(@) ---+"
$(OL) $(@) $(OMOD_2) $(LIBCOM) $(LIBUTL) $(LIBCCM) /
$(LIBORA) $(LMOD_1) $(OLOPT)
@ $(SAY) ""

$(BMOD_3) : $(OMOD_3) /
$(MTLIB_ELE) $(COMLIB_ELE) $(CCMLIB_ELE) /
$(ORALIB_ELE) $(SYSLIB_ELE)
@ $(SAY) "+--- make $(@) ---+"
$(OL) $(@) $(OMOD_3) $(LIBCOM) /
$(LIBUTL) $(LIBPKS) $(LIBCCM) $(LIBORA) $(LMOD_1) $(OLOPT)
@ $(SAY) ""

#=============================================================================#
# export #
#=============================================================================#
export : /
exportetc exportsrc exportinc exportobj exportlib exportbin exportmsc
@ $(SAY) "$(@) done !"
@ $(SAY) ""

exportetc :
@ $(IF)$(FSY)$(RUNETC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNETC)"$(FI)
@ $(IF)$(FSY)$(RUNETC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNETC) $(FI)

exportsrc :
@ $(IF)$(FSY)$(RUNSRC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNSRC)"$(FI)
@ $(IF)$(FSY)$(RUNSRC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNSRC) $(FI)

exportinc : $(RUN_IMOD_1)
@ $(IF)$(FSY)$(RUNINC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNINC)"$(FI)
@ $(IF)$(FSY)$(RUNINC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNINC) $(FI)
$(RUN_IMOD_1) : $(IMOD_1)
$(CP) $(IMOD_1) $(RUN_IMOD_1)

exportobj :
@ $(IF)$(FSY)$(RUNOBJ)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNOBJ)"$(FI)
@ $(IF)$(FSY)$(RUNOBJ)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNOBJ) $(FI)

exportlib : $(RUN_LMOD_1)
@ $(IF)$(FSY)$(RUNLIB)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNLIB)"$(FI)
@ $(IF)$(FSY)$(RUNLIB)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNLIB) $(FI)
$(RUN_LMOD_1) : $(LMOD_1)
$(CP) $(LMOD_1) $(RUN_LMOD_1)

exportbin : $(RUN_BMOD_2) $(RUN_BMOD_3)
@ $(IF)$(FSY)$(RUNBIN)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNBIN)"$(FI)
@ $(IF)$(FSY)$(RUNBIN)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNBIN) $(FI)
$(RUN_BMOD_2) : $(BMOD_2)
$(CP) $(BMOD_2) $(RUN_BMOD_2)
$(RUN_BMOD_3) : $(BMOD_3)
$(CP) $(BMOD_3) $(RUN_BMOD_3)

exportmsc :
@ $(IF)$(FSY)$(RUNMSC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(RUNMSC)"$(FI)
@ $(IF)$(FSY)$(RUNMSC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(RUNMSC) $(FI)

#=============================================================================#
# delete old #
#=============================================================================#
delold : /
deloldetc deloldsrc deloldinc deloldobj deloldlib deloldbin deloldmsc /
deloldlis
@ $(SAY) "$(@) done !"
@ $(SAY) ""
deloldetc :
@ $(IF)$(FSY)$(ETC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(ETC)"$(FI)
@ $(IF)$(FSY)$(ETC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(ETC) $(FI)
deloldsrc :
@ $(IF)$(FSY)$(SRC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(SRC)"$(FI)
@ $(IF)$(FSY)$(SRC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(SRC) $(FI)
deloldinc :
@ $(IF)$(FSY)$(INC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(INC)"$(FI)
@ $(IF)$(FSY)$(INC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(INC) $(FI)
deloldobj :
@ $(IF)$(FSY)$(OBJ)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(OBJ)"$(FI)
@ $(IF)$(FSY)$(OBJ)*.*$(SM1)$(FSE)$(THEN) $(PU)$(OBJ) $(FI)
deloldlib :
@ $(IF)$(FSY)$(LIB)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(LIB)"$(FI)
@ $(IF)$(FSY)$(LIB)*.*$(SM1)$(FSE)$(THEN) $(PU)$(LIB) $(FI)
deloldbin :
@ $(IF)$(FSY)$(BIN)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(BIN)"$(FI)
@ $(IF)$(FSY)$(BIN)*.*$(SM1)$(FSE)$(THEN) $(PU)$(BIN) $(FI)
deloldmsc :
@ $(IF)$(FSY)$(MSC)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(MSC)"$(FI)
@ $(IF)$(FSY)$(MSC)*.*$(SM1)$(FSE)$(THEN) $(PU)$(MSC) $(FI)
deloldlis :
@ $(IF)$(FSY)$(LIS)*.*$(SM1)$(FSE)$(THEN)$(SAY)"$(PU)$(LIS)"$(FI)
@ $(IF)$(FSY)$(LIS)*.*$(SM1)$(FSE)$(THEN) $(PU)$(LIS) $(FI)

#=============================================================================#
# clean #
#=============================================================================#
clean : /
cleanetc cleansrc cleaninc cleanobj cleanlib cleanbin cleanmsc /
cleanlis
@ $(SAY)"$(@) done !"
@ $(SAY)""
cleanetc :
@ $(CONTINUE)
cleansrc :
@ $(IF)$(FSY)$(SMOD_1) $(FSE)$(THEN)$(SAY)"$(RM)$(SMOD_1)$(SS)"$(FI)
@ $(IF)$(FSY)$(SMOD_1) $(FSE)$(THEN) $(RM)$(SMOD_1)$(SS) $(FI)
@ $(IF)$(FSY)$(SMOD_2) $(FSE)$(THEN)$(SAY)"$(RM)$(SMOD_2)$(SS)"$(FI)
@ $(IF)$(FSY)$(SMOD_2) $(FSE)$(THEN) $(RM)$(SMOD_2)$(SS) $(FI)
@ $(IF)$(FSY)$(SMOD_3) $(FSE)$(THEN)$(SAY)"$(RM)$(SMOD_3)$(SS)"$(FI)
@ $(IF)$(FSY)$(SMOD_3) $(FSE)$(THEN) $(RM)$(SMOD_3)$(SS) $(FI)
@ $(CONTINUE)
cleaninc :
@ $(CONTINUE)
cleanobj :
@ $(IF)$(FSY)$(OMOD_1) $(FSE)$(THEN)$(SAY)"$(RM)$(OMOD_1)$(SS)"$(FI)
@ $(IF)$(FSY)$(OMOD_1) $(FSE)$(THEN) $(RM)$(OMOD_1)$(SS) $(FI)
@ $(IF)$(FSY)$(OMOD_2) $(FSE)$(THEN)$(SAY)"$(RM)$(OMOD_2)$(SS)"$(FI)
@ $(IF)$(FSY)$(OMOD_2) $(FSE)$(THEN) $(RM)$(OMOD_2)$(SS) $(FI)
@ $(IF)$(FSY)$(OMOD_3) $(FSE)$(THEN)$(SAY)"$(RM)$(OMOD_3)$(SS)"$(FI)
@ $(IF)$(FSY)$(OMOD_3) $(FSE)$(THEN) $(RM)$(OMOD_3)$(SS) $(FI)
@ $(CONTINUE)
cleanlib :
@ $(IF)$(FSY)$(LMOD_1)$(FSE)$(THEN)$(SAY)"$(RM)$(LMOD_1)$(SS)"$(FI)
@ $(IF)$(FSY)$(LMOD_1)$(FSE)$(THEN) $(RM)$(LMOD_1)$(SS) $(FI)
@ $(CONTINUE)
cleanbin :
@ $(IF)$(FSY)$(BMOD_2)$(FSE)$(THEN)$(SAY)"$(RM)$(BMOD_2)$(SS)"$(FI)
@ $(IF)$(FSY)$(BMOD_2)$(FSE)$(THEN) $(RM)$(BMOD_2)$(SS) $(FI)
@ $(IF)$(FSY)$(BMOD_3)$(FSE)$(THEN)$(SAY)"$(RM)$(BMOD_3)$(SS)"$(FI)
@ $(IF)$(FSY)$(BMOD_3)$(FSE)$(THEN) $(RM)$(BMOD_3)$(SS) $(FI)
@ $(CONTINUE)
cleanmsc :
@ $(CONTINUE)
cleanlis :
@ $(CONTINUE)

#=============================================================================#
# Copyright (C) BS AG 1998. All Rights Reserved. Confidential #
#=============================================================================#

从0开始教你编写Makefile文件 编写Makefile第一步,了解什么是Makefile?每当我们写大型项目时,一般需要很多源文件,源文件会在不同的目录中的文件夹里面包含着,这样我们所有的源文件不会在一个文件中包含,用gcc-omain所有的.c文件来编译,就很麻烦了,你需要记住所有的.c文件,那么为了方便编译链接,就此诞生。在学习Makefile之前,首先介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。.obj.o.lib.a)。.......... 阅读详情

相关推荐

【Makefile】Makefile与shell命令为何总是藕断丝连?

博主最近在项目实践过程中,需要深度定制项目的Makefile,其中有些复杂的流程必须得借助shell脚本才能高效地完成,为此博主特意深入学习了在Makefile种调用shell命令的方法。 大家都知道shell命令是Linux的神器,学会灵活应用它可以大大提升执行的自动化效率。 Makefile也是GNU的另一大神器,大家要知道,大名鼎鼎的Linux内核的编译就是靠Makefile来支撑的,连这么庞大、复杂的系统编译它都可以轻松驾驭,可想而知,它也是牛逼哄哄的存在。 我们试想一下,如果把Makefil

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 2万+

shell脚本编程Makefile的编写,让你的代码编译链接更加快速

文章目录为什么要使用MakefileMakefile的编写Make 工作原理Makefile的规则: 为什么要使用Makefile 简单来说,当我们写一个稍微大一些项目的时候,如果我们要执行一个程序那得编译很多个文件并且还得链接起来,如果没有Makefile我们就得一个一个编译一个一个链接那真的是又臭又长(而且还会经常写错),而Makefile就能够很好的解决这个问题,所以说掌握好Makefile的编写是很有必要的 Makefile的编写 程序的编译和链接 使用C、C++编写可执行程序,首先要把源

Jacksqh的博客 2569

shell高级编程实例(365例子)

Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).

makefile执行shell脚本

语法 $(shell pwd) shell是函数名,后面的pwd是参数,返回的结果赋值给LDIR CMD前面加@表示执行的时候不显示该命令,只显示命令的输出 当makefile的文件名不是makefile或者Makefile的时候,用make -f 文件名 注:只是定义变量的话,这个shell不会被执行,执行当这个变量被CMD执行的时候,这个shell才会被执行 [root@system CProgram]# cat test.mk #test.mk LDIR=$(shell pwd) LSS

johnmand的博客 1万+

几个shell编程的小例子

shell编程小例子,一个是一百内的素数,一个是求和,一个是比较大小,还有一个是。。。

车载智能终端的设计

本文研究的主要内容是车载智能终端的设计,在学习和借鉴国内外在车载电子领域已有的成熟经验的基础上,利用32位嵌入式处理器S344B0X01和μC/OS-Ⅱ实时操作系统技术,针对汽车行驶记录仪、GPS/GPRS的已有设计的不足提出了新的解决方案,并对方案的可行性进行了分析和论证。

weixin_44553616的博客 1415

编写简单通用makefile

在Makefile基础中总结了makefile最常用的基础,利用这些知识点,足矣编写通用makefile运用于c/c++项目中。本文基于这样的文件编写makefile:   编写makefile需要实现:   (1) 将bank.cpp编译成静态库bank.a/动态库bank.so;   (2) 将bank.a和bank.so拷贝/opt/lib目录下;   (3) 将bank.h拷贝

echo_bright_的博客 1500

保姆级教程:用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信(附完整代码)

本文详细介绍了如何利用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信,涵盖硬件连接、寄存器配置、时序优化及FPGA接口设计等关键步骤。通过实例代码和调试技巧,帮助开发者快速掌握高效数据交互技术,提升嵌入式系统设计能力。

weixin_26918763的博客 226

Shell编程实战范例

前言: 本部分主要参考此博客: https://www.w3cschool.cn/shellbook/uglqdozt.html 数值运算: 进制转换: 其他进制转换为10进制, 可以使用Shell内置的进制转换 如将8进制的11转换为10进制: echo "8to10 $[8#11]" 直接使用bc计算器, 能直接指定源&目标进制, 方便转换 由于bc是交互式的计算器, 所以这里没法直接使用参数的形式进行, 而是采用echo一个用分号分割的多条语句组成的字符串给bc, 其将自动打印结果 ec

Janus 2897

情感分析在金融领域的应用:舆情影响股价预测

我们都知道,股价的波动受到多种因素的影响,而大众的情绪和看法就是其中很重要的一部分。我们在日常生活中都有根据别人的评价来判断事物好坏的经验,在金融市场里,舆情就像是大众对某家公司的集体评价,它能反映出市场参与者的情绪和预期。学习这方面的知识,能帮助投资者更好地把握市场动态,做出更明智的投资决策,无论是个人投资者还是金融机构的分析师,都能从中受益。有一天,你看到某家知名企业被曝光了严重的产品质量问题,新闻铺天盖地,股民们也都在热议纷纷,负面情绪弥漫。这时,你会不会觉得这家公司的股价可能要下跌了呢?

AI 原生应用开发的博客 1147

华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。

qq_45776114的博客 590

shell和Makefile

shell介绍 shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式 (2)我们可以使用shell和操作系统,uboot等软件系统进行交互。具体来说就我们通过shell给软件系统输入命令然后回车执行,执行完后又回到shell命令行可以再次输入命令执行 (3)上述的操作方式很好,但是有一定的缺陷。如要新建100个.c文件。最好的做法就是把创建的过程写成一个shell脚本,然后执行这个shell脚本程序,执行这个程序的效果和手工在命令行输入

qq_52916060的博客 2906

微信小程序 - 实现身份证OCR识别人像面与国徽面并提取字段信息,详解从手机相册选取或打开摄像头拍照上传身份证正反面图片ocr文字识别数据填充表单(提供免费纯前端ocr识别插件+百度OCR识别API)

微信小程序身份证识别,微信小程序身份证拍照、上传并OCR识别,微信小程序实现OCR扫描识别,微信小程序识别身份证免费插件,微信小程序实现身份证识别功能。ocr识别插件。微信身份证拍照后进行ocr识别,微信小程序OCR扫描识别身份证,OCR身份证实名认证+图片上传+拍照上传图片,微信小程序之身份证照片正反上传,小程序OCR身份证识别,微信小程序实现文字识别-ocr插件,微信小程序利用百度AI实现扫描身份证获取信息功能,基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例demo,将上传的照片传到服务

🏆 前端领域优质创作者 8135

shell编程——Makefile

需要注意的是,尽管在GNU make中没有对变量的命名有其它的限制,但定义一个包含除字母、数字和下划线以外的变量的做法也是不可取的,因为除字母、数字和下划线以外的其它字符可能会在以后的make版本中被赋予特殊含义,并且这样命名的变量对于一些Shell来说不能作为环境变量使用。、#等等,这些特殊的变量之所以称为自动化变量,是因为它们的值会“自动地”发生变化,可以类比普通变量,只要你不给它重新赋值,那么它的值是永久不变的,比如上面的系统预定义CC变量,只要不对它重新赋值,CC永远都等于gcc。

ycs66的博客 1230

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3008

基于YOLOv8的应急通道占用监测系统设计与实现

通过详细的数据集选择、模型训练、代码实现等内容,本博客为您提供完整的系统搭建过程,帮助您构建高效的监测系统。然而,在一些建筑物和公共场所中,应急通道经常被不当占用,导致紧急情况下无法及时使用,严重影响人员的疏散效率。YOLOv8是YOLO系列中的最新版本,它通过引入深度学习的优化和改进,在保证检测速度的同时,显著提升了检测精度。同时,随着深度学习技术的不断发展,检测精度与速度的提升将使得该系统在更广泛的场景中应用。:如果已有监控设备,可以采集应急通道的实时视频,并进行标注,生成占用监测数据集。

YOLO 797

Makefile中的shell用法

在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙。下面总结了一些。 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码。 eg: xx = xx1         // 这里时makefile代码 yy:xx = xx2   // 这是是makefile代码,makefile允许变量赋值时,

鱼思故渊的专栏 2万+

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法。

kevin1499的博客 1617

Makefile 和 shell 脚本的区别与联系

一、什么是 Makefile? 描述了整个工程的编译、链接规则。当源码文件比较多的时候就不适合通过输入 gcc 命令来编译,Makefile 文件描述了编译哪些源码文件、如何编译,每次需要编译工程时只需要使用这个文件就行了。 注意:Makefile 中空出来的部分用 Tab 键,不能用空格;注释用 “#”,不能用 “//”。 使用 Makefile 的方法:直接在命令行中输入 “make”,m...

devilzcl的博客 6556

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

在Makefile中写shell脚本

如果你想在Makefile里面直接写bash脚本,你需要做一些特殊处理,而不能直接粘贴复制你的bash脚本。如果你在target行后直接粘贴复制,你会遇到两个问题: 命令行要以tab为缩进 $需要转义 如果你用gnu的make,你可以根据multi-line definition syntax来将你的脚本定义为一个变量,然后集合valuefunction来使用。 另外,你还需要告诉你的ma...

1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

shell 与 makefile 有什么区别

是一种命令行解释器(Command Interpreter),如bashzshsh等。用户通过 Shell 与操作系统交互,执行命令、运行脚本、管理进程等。Shell 脚本(.sh文件)是用 Shell 语言编写的程序,用于自动化任务。类型命令行解释器 / 脚本语言构建规则描述文件执行方式直接运行脚本由make工具解析执行语法过程式(命令序列)声明式(目标:依赖 + 命令)依赖管理无,需手动实现自动(基于文件时间戳)主要用途通用自动化、系统管理项目构建、编译自动化。

嵌入式心学修行者,以代码为器,以良知为核。探索嵌入式开发中的“知行合一”,在编译、调试、部署中事上磨练致心中之光,铸可靠之器。 1001

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

makefile和shell脚本

makefile和shell脚本 Makefile本质上也是shell脚本,即每条command都是shell进程,运行完shell进程都会退出。 shell代码行,如果有=的话,=两边不能有空格。 Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。可以用\来分行写,格式清晰一点。 shell中所有引用以$打头的变量

专注计算机体系结构 1446

Linux学习之Makefile和shell

基本语法:目标、依赖、命令。变量:使用变量简化 Makefile。自动变量:使用$@$^$

zhaozhaoxiyang的博客 1596

Linux驱动编程学习 Makefile / Shell

摘要: Shell是命令行解释器,负责将用户命令传递给系统内核执行。Shell脚本由多个命令组成,可实现自动化操作。 Makefile用于管理大型工程编译,通过定义规则实现增量编译。

m0_58567143的博客 826

一个最简单的makefile例子

本来早就应该学Makefile了,只是我偷懒,现在才学呵呵^_^makefile的好处叫我说,老实说我也说不出什么之所以然来,但是可以肯定的是它是linux平台的软件工程师都要必备的知识^_^ 一、程序的编译及链接     我们编译程序,无非是想要得到一个可执行文件,而这个过程则是经过这两步: ***.c->编译->***.o->链接->可执行文件。即.c经过编译得到.o文件,.o文件是

668

Makefile中的变量和Shell中的变量

变量就是给一串字符串起的名字。这串字符串就是变量的值。 变量的定义使用“=”或者使用指示符“define”。 变量的展开是严格的字符串替换。 变量的引用 Makefile 中: 在Makefile中,变量的引用方法:$(VAR) 或者 ${VAR} ; 在Makefile中,不能使用 $VAR ,除非变量名为单字符 。 Makefile 中符号$有特殊的含义(表示变量或者函数的引用),在规...

博客NO.18 3282
上一篇: Shell 编程(3)
下一篇: TCP/IP协议端口大全
Chendy
博客等级 码龄23年 67粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值