GNU C语言开发环境

2. GNU make 项目管理工具

3. 创建和使用函数库

4. GNU C 函数库(glibc)

1.GNU C 编译器

  使用 c语言 编写的代码,运行前必须经过编译和链接,最终生成可执行程序。(编译,编译语言源代码;链接,链接引用的函数库。)这个孕育的过程,需要一些工具、一些函数库,其中这个工具就叫做“编译器”。

  GNU C 编译器叫做 gcc,gcc包含了预处理器、编译器、汇编器、链接器等。语法格式:

$ gcc [option] dest_file source_file

选 项功 能
Wall   打印警告信息  
g   添加调试信息到输出文件  
O o0 o1 o2   优化选项,多个同时出现时,最后一个生效  
I   指定头文件搜索路径,可以出现多个  
L   指定库文件搜索路径,可以出现多个  
l   指定引用的库  
static   使用静态链接  
shared   使用动态链接  
E   输出预处理后的文件  
S   编译生成的汇编文件(.s)  
c   编译生成的目标文件(.o)  
o   指定输出的文件名(default:a.out)  

  编译hello world为例:

[linuxidc.com@linuxidc 00]$ gcc -S hello.c // 生成汇编代码 [linuxidc.com@linuxidc 00]$ ls hello.c hello.s [linuxidc.com@linuxidc 00]$ gcc -c hello.c // 生成目标代码 [linuxidc.com@linuxidc 00]$ ls hello.c hello.o [linuxidc.com@linuxidc 00]$ gcc hello.o // 链接目标文件 [linuxidc.com@linuxidc 00]$ ls a.out hello.c hello.o [linuxidc.com@linuxidc 00]$ ./a.out hello world. [linuxidc.com@linuxidc 00]$ gcc -Wall hello.c -o hello // 打开警告信息,指定可执行文件名称 [linuxidc.com@linuxidc 00]$ ls hello hello.c [linuxidc.com@linuxidc 00]$ ./hello hello world.

 

2.GNU make 项目管理工具

  项目中,常采用模块化开发,将系统分解为多个模块,每个模块完成特定的功能。如此分了模块,便会出现多个源代码文件。在调试阶段,可能会反复编译链接,会出现繁琐的重复操作。于是,make 应运而生,来代替手动的繁琐重复操作。make 还可以规避编译未修改源代码的文件

2.1.格式

  make 工具可以从文本文件读取编译规则,每条规则的语法如下:

目标列表:依赖的文件列表 <tab>命令1 # 每行命令的开头必须有一个 tab空白符 <tab>命令2 # 可以存在多条命令

每条规则由:依赖关系和命令两部分组成。所有的命令开头需要有个tab,以#开头表示注释的内容。

  make 命令的语法:

$ make [option] [目标] // 创建指定的目标(默认首个目标) $ make -h // 显示所有的make选项

  规则文件 Makefile 举例:

hello:hello.o gcc -o hello hello.o hello.o:hello.c gcc -c -o hello.o hello.c clean: rm -f *.o

2.2.变量

  变量的定义和引用,跟 Shell 中一样。

CC = gcc INSTALL = install CFLAGS = -O2 -Wall -W -Wshadow OBJS = main.o prelogin.o postlogin.o privsock.o \ tunables.o secbuf.o ls.o .c.o: $(CC) -c $*.c $(CFLAGS) $(IFLAGS) install: if [ -x /usr/local/sbin ]; then \ $(INSTALL) -m 755 fint /usr/local/sbin/fint; \ else \ $(INSTALL) -m 755 fint /usr/sbin/fint; fi

  GNU make 预定义了一些变量,在 Makefile 文件中可以直接使用,也可以对这些变量进行重新定义。

预定义变量含义默认值
RM   删除文件   rm -r  
$^   规则中出现所有依赖文件      
$<   第一个依赖文件的名称      
$?  

规则中出现所有依赖文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a6f063bb184b93720235c9cada5543ec.html