Linux程序设计:make命令和makefile文件

make命令和makefile文件

  • make常用的3个选项
    • make   -k  让make命令发现错误继续执行。
    • make   -n  让make命令输出将要执行的操作步骤,而不是真正执行这些操作。
    • make    -f  <filename>   告诉make命令要执行那个文件作为makefile文件。
  • makefile 文件注释
    • 以#号开头
  • makefile文件中的宏
    • $? 当前目标所依赖的文件列表中比当前目标文件还要新的文件
    • $@ 当前目标的名字
    • $<  当前依赖文件的名字
    • $*  不包括后缀名的当前依赖文件的名字
  • 多个目标
    • 在makefile文件中增加一个cleani选项来删除不需要的目标文件爱你,增加install选项来将编译成功的应用程序安装到另一个目录下。
  • 内置规则
    • 可以通过make -p命令输出内置规则
  • 后缀和模式规则
    • 要增加一个新的后缀规则,首先要在makefile文件中增加一行语句,告诉make命令这个新的后缀名。
  • 用make管理函数库
    • make命令用一个特殊语法来处理函数库。
    • 常见形式如下:

    .c.a                                     

               $(CC)   -c    $(CFLAGS)    $<        $(AR)    

                $(ARFLAGS)    $@     $*.o 

第一条规则告诉它必须编译源文件以生成目标文件。

第二条规则告诉它用ar命令将新的目标文件添加到函数库中 。  

  • 高级主题:makefile文件和子目录
    • 大型项目有时候需要构建一个函数库的几个文件从主文件分离出来。
      • 第一个方法:在子目录编写第二个makefile文件
      • 第二个方法:在原来makefile文件中添加一些宏。
  • GNU make 和gcc
    • make    -jN    它允许make命令同时执行行N条命令 。如果有许多源文件,这个选项值得一试。
    • gcc       -MM   它的作用是产生一个适用于make命令的依赖关系清单。

代码示例: main.c    1.c  2.c  3.c     a.h   b.h  c.h 

makefile1 

myapp: main.o 2.o 3.o
	gcc -o myapp main.o 2.o 3.o

mian.o: main.c a.h 
	gcc -c main.c 

2.o: 2.c a.h b.h 
	gcc -c 2.c 

3.o: 2.c b.h c.h
	gcc -c 3.c 

makefile2 

all:myapp

CC = gcc 

INSTDIR = /usr/local/bin

INCLUDE = .

CFLAGS = -g -Wall -ansi

myapp:   main.o 2.o 3.o
	$(CC) -I$(INCLUDE)   $(CFLAGS)   -c main.c   

2.o: 2.c a.h b.h
	$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c 

3.o: 3.c b.h c.h
	$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c 

clean: 
	-rm main.o 2.o 3.o 

install : myapp
	@if [-d $(INSTDIR) ]; \
	   then  \
	   cp myapp $(INSTDIR);\
	   chmod a+x $(INSTDIR)/myapp;\ 
	   chmod og-w $(INSTDIR)/myapp;\ 
	   echo "Instaled in $(INSTDIR)";\ 
	else  \ 
	    echo "Sorry $(INSTDIR) does not exit ." ;\ 
	fi

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值