博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux学习日记(十四)——Ubuntu下 make工程管理器的使用
阅读量:4110 次
发布时间:2019-05-25

本文共 1915 字,大约阅读时间需要 6 分钟。

                                 Ubuntu下 make工程管理器的使用

gcc用于编译,gdb用于调试,make用于工程管理。当工程文件数量庞大,多大数百上千的时候,人工去管理这数量众多的文件的编译链接其难度可想而知,而make工程管理器作为“自动编译管理器”,能够根据工程文件的时间戳自动发现更新过的文件减少编译量,通过对makefile文件的读取指导执行大量的编译工作,大大提高了工作效率。

makefile的基本结构

makefile文件是make工具读取的唯一配置文件,在一个makefile文件中通常包含以下部分:

  1. 需要由make工具创建的目标体(target)
  2. 要创建的目标体所依赖的依赖文件(dependency_file)
  3. 创建每个目标体时需要运行的命令(command),该行必须以Tab键开头

       target: dependency_file

              command

       #简单示例

       hello.o: hello.c hello.h

              gcc -c hello.c -o hello.h

       写好了makefile就可以使用make工具进行操作了。make的使用格式为:make target,然后make就会自动读取makefile文件并执行相应target的command语句了。

       makfile变量

       为了进一步简化编辑和维护makefile,make工具允许在makefile中创建和使用变量。变量是在makefile中定义的名字,用来替代一个文本字符串,该文本字符串称为该变量的值。在具体要求下,这些值可以替代目标体(target)依赖文件(dependency_file)命令(command)以及makefile文件中的其他部分。

       makefile中变量的定义分为:递归方式简单方式

       递归方式指的是变量的定义中包含了对其他变量的引用,然后在展开的时候一次性展开。

       简单方式指的是简单扩展型变量的值在定义处展开,并且只展开一次,不包含对其他变量的引用。

      makfile中常见的预定义变量

       AR

              库文件维护程序的名称,默认值为ar

       AS

              汇编程序的名称,默认值为as

       CC

              C编译器的名称,默认值为cc

       CPP

              C预编译器的名称,默认值为$(CC)-E

       CXX

              C++编译器的名称,默认值为g++

       FC

              Fortran编译器的名称,默认值为f77

       RM

              文件删除程序的名称,默认值为rm-f

       ARFLAGS

              库文件维护程序的选项,无默认值

       ASFLAGS

              汇编程序的选项,无默认值

       CFLAGS

              C编译器的选项,无默认值

       CPPFLAGS

              C预编译器的选项,无默认值

       CXXFLAGS

              C++编译器的选项,无默认值

       FFLAGS

              Fortran编译器的选项,无默认值

      makefile中常见的自动变量

       $*

              不包含扩展名的目标文件名称

       $+

              所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件

       $<

              第一个依赖文件的名称

       $?

              所有时间戳比目标文件晚的依赖文件,并以空格分开

       &@

              目标文件的完整名称

       $^

              所有不重复的依赖文件,以空格分开

       $%

              如果目标文件是归档成员,则该变量表示目标的归档成员名称

       值得注意的还有一点,在makefile中可以使用系统环境变量,但如果用户在makefile中定义了相同的变量,那么用户定义的变量就会覆盖原有的系统变量。

       makefile规则

  1. 隐含规则

                     隐含规则能够告诉make如何使用传统的规则完成任务,这样用户就在使用时        不必指定详细的编译细节。

                     在隐式规则中只能查找到相同文件名的不同后缀名文件,如:“test.o”文件必须              由”test.c”文件生成。

              makefile中常见的隐式规则

       C编译

              $(CC) -c $(CPPFLAGS) $(CFLAGS)

       C++编译

              $(CXX) -c $(CPPFLAGS) $(CXXFLAGS)

       Pascal编译

              $(PC) -c $(PFLAGS)

       Fortran编译

              $(FC) -c $(FFLAGS)

 

  1. 模式规则

                     模式规则是用来定义相同处理规则的多个文件,模式规则能引入用户自定义变              量,为多个文件建立相同的规则,简化makefile的编写。

 

      make的命令行选项

       -C dir

              读入指定目录下的makefile

       -f file

              读入当前目录下的file文件作为makefile

       -i

              忽略所有的命令执行错误

       -I dir

              指定被包含的makefile所在目录

       -n

              只打印要执行的命令,但不执行这些命令

       -p

              显示make变量数据库和隐含规则

       -s

              在执行命令时不显示命令

       -w

              如果make在执行过程中改变目录,则打印当前目录名

 

 

 

 

转载地址:http://whmsi.baihongyu.com/

你可能感兴趣的文章
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>