gcc make makefile 的基本介绍

一.gcc

1.在window操作系统下,编译工具用集成开发环境

在Linux操作系统下没有很好的集成环境,用的编译器是gcc

 

2.程序的编译分为四个阶段 由 .c到可执行程序

(1). 预编译

(2). 编译

(3). 汇编

(4). 链接

3.编译程序

(1).一步到位

        gcc xxx.c 默认会生成一个名为 a.out 的可执行文件 

        gcc xxx.c -o xxx

        运行程序: ./xxx

(2)分步骤完成 

        [1]预处理   gcc -E xxx.c -o xxx.i  

        [2]编译     gcc -S xxx.i -o xxx.s

        [3]汇编     gcc -c xxx.s -o xxx.o

        [4]链接     gcc    xxx.o -o xxx

二.make 

1.什么是make

        make是个命令,是个可执行程序,用来解析Makefile文件的命令

        这个命令存放在 /usr/bin/ 

2.什么是makefile

        makefile是个文件,这个文件中描述了程序的编译规则

        执行make命令的时候,make命令会在当前目录下找makefile文件

        根据makefile文件里面的规则,编译程序

3.采用makefile的好处

        (1).简化编译程序的时候输入得命令,编译得时候只需要make命令即可

        (2).可以节省编译时间,提高编译效率

4.make主要解决的两个问题

        (1)大量代码的关系维护

        大项目中源代码多,手工维护、编译时间长而且编译命令复杂,难以记忆以及维护

        把代码维护命令以及编译命令写在makefile中,然后再用make工具解析此文件自动执行相应命令

        代码的合理编译

        (1)减少重复编译时间

在改动其中一个文件的时候,能判断哪些文件被修改过,可以只对改文件进行重新编译,,然后重新链接所有的目标文件,节省编译时间

5.makefile语法规则

        目标: 依赖文件列表

         命令列表 

        (1)目标

        通常是要产生的文件名称,目标可以是可执行文件或其它obj文件,也可是一个动作的名称

        (2)依赖文件

        是用来输入从而产生目标的文件,一个目标通常有几个依赖文件

        (3)命令

        make执行的动作,一个规则可以含几个命令.有多个命令时,每个命令占一行

6.make [-f file] [targets]

        (1) [-f file]

            make默认在工作目录中寻找名为GNUmakefile、makefile、 Makefile 的文件作为makefile输入文件

            -f可以指定以上名字以外的文件作为makefile输入文件

        (2) [targets]

        若使用make命令时没有指定目标,则make工具默认会实现makefile文件内的第一个目标,然后退出

        指定了make工具要实现的目标,目标可以是-一个或多个(多个目标间用空格隔开)。

三.makefile 

1. makefile变量

类似于C语言中的宏,当makefile被make工具解析时,其中的变量会被展开

2.变量的作用:

        (1)保存文件名列表

        (2)保存文件目录列表

        (3)保存编译器名

        (4)保存编译参数

        (5)保存编译的输出

3.变量分类

        (1)自定义变量

        在makefile文件中定义的变量,make工具传给makefile的变量

        

{ 
		定义变量:
			变量名=变量值
		引用变量:
			$(变量名) 或者 {变量名}
		makefile的变量名
			makefile的变量名可以以数字开头
		注意:
			1. 变量是大小写敏感的
			2. 变量一般都在makefile的头部定义
			3. 变量几乎可在makefile的任何地方使用 
	}

        (2)系统环境变量

        make工具解析makefile前,读取系统环境变量并设置为makefile的变量

        (3)预定义变量

{
		$@ 目标名
		$< 依赖文件列表中的第一个文件
		$^ 依赖文件列表中除去重复文件的部分
		AR  归档维护程序的程序名,默认值为ar
		ARFLAGS 归档维护程序的选项
		AS 汇编程序的名词,默认值为as
		ASFLAGS 汇编程序的选项
		CC C编译的名称,默认值为cc
		CFLAGS C编译器的选项 
		CPP C预编译器的名称,默认值为 $(CC) -E
		CPPFLAGS C预编译的选项
		CXX C++编译器的名称,默认值为 g++
		CXXFLAGS C++编译器的选项  
	}

        

你可能感兴趣的:(C语言,linux,c++,运维)