2021-07-08

Makefile笔记:参考linux程序设计第四版

make -jn: 允许make同时执行N条指令
gcc -MM main.c :产生一个适用于make命令的依赖关系清单,当源文件较多以及包含关系复杂时使用
main.o : main.c a.h
2.o : 2.c a.h b.h
3.o : 3.c b.h c.h

$? 当前目标所依赖的文件列表中比当前文件还要新的文件
$@ 当前目标的名字
$< 当前依赖文件的名字
$* 不包括后缀名的当前依赖文件的名字
@{if…} 命令以符号@开头,表示make在执行这些规则之前不会在标准输出上显示命令本身

/******************************************************************************************************
#makefile
all : myapp

#which compiler
CC = gcc

#where to install
INSTDIR = /usr/local/bin

#where are include files kept
INCLUDE = ./include

#options for development
CFLAGS = -o -Wall -ansi

#local libraries
MYLIB = mylib.a

myapp : main.o $(MYLIB)
$(CC) -o myapp main.o $(MYLIB)

$(MYLIB) : $(MYLIB)(2.o) $(MYLIB)(3.o)
main.o : main.c a.h
2.o : 2.c a.h b.h
3.o : 3.c b.h c.h

clean:
-rm main.o 2.o 3.o $(MYLIB)

install : myapp
@if [-d $(INSTDIR)];
then
cp myapp $(INSTDIR);
chmod a+x $(INSTDIR)/myapp;
chmod og-w $(INSTDIR)/myapp;
echo “installed in $(INSTDIR)”;
else
echo “fault , $(INSTDIR) does not exits”;
fi

/***********************************************************************************************
#makefile
DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./objs
DIR_BIN = ./bin
/**********************************************************************
在Makefile内置规则中,通配符会被自动展开,但是在变量的定义和函数引用时,通配符将失效;此种情况下需要
通配符有效,就要使用函数"wildcard"确保通配符有效;
echo src : ./src/a.c ./src/b.c …
/**************************************************************************
SRC = $(wildcard ${DIR_SRC}/*.c)
/*****************************************************************************
"notdir"把展开的文件去除路径信息
echo : a.c b.c …
“patsubst” : 将列表中的所有的.c后缀文件替换为.o
/*****************************************************************************
OBJ = ( p a t s u b s t (patsubst %.c, (patsubst{DIR_OBJ}/%.o,$(notdir ${SRC}))
TARGET = main
BIN_TARGET = D I R B I N / {DIR_BIN}/ DIRBIN/{TARGET}

CC = arm-xilinx-linux-gnueabi-gcc -w

CFLAGS = -g -Wall -I${DIR_INC}
B I N T A R G E T : {BIN_TARGET}: BINTARGET:{OBJ}
$(CC) $(OBJ) -lpthread -lm -o $@
D I R O B J / {DIR_OBJ}/%.o: DIROBJ/{DIR_SRC}/%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
clean:
find ${DIR_OBJ} -name *.o -exec rm -rf {} ;

/******************************************************************************************************
#Makefile
INSTDIR = ./output
DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./objs
DIR_BIN = ./bin

SRC = $(wildcard $(DIR_SRC)/*.c)
OBJ = ( p a t s u b s t (patsubst %.c, (patsubst(DIR_OBJ)/%.o,$(notdir $(SRC)))

TARGET = main
BIN_TARGET = ( D I R B I N ) / (DIR_BIN)/ (DIRBIN)/(TARGET)

CC = arm-xilinx-linux-gnueabi-gcc -w

CFLAGS = -g -Wall -I$(DIR_INC)

( B I N T A R G E T ) : (BIN_TARGET): (BINTARGET):(OBJ)
$(CC) $(OBJ) -lpthread -lm -o $@
( D I R O B J ) / (DIR_OBJ)/%.o: (DIROBJ)/(DIR_SRC)/%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
clean:
find $(DIR_OBJ) -name *.o -exec rm -rf {} ;

install: $(BIN_TARGET)
@if [ -d $(INSTDIR) ];
then
cp $(BIN_TARGET) $(INSTDIR);
chmod 777 ( I N S T D I R ) / (INSTDIR)/ (INSTDIR)/(TARGET);
echo “installed in $(INSTDIR)”;
else
echo “fault , $(INSTDIR) does not exits”;
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值