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

发布时间:2024年01月23日

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

文章来源:https://blog.csdn.net/Liang123l/article/details/135767829
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。