导航

编译:hello.c

1、使用GCC编译器:

 gcc -o hello hello.c

  生成名为hello的可执行文件,执行./hello即可执行(-o后面跟生成文件名)

 -c 表示只要求编译器输出目标代码,而不必输出可执行文件(生成.o目标文件)

 -g 提供GDB调试

 

2、Makefile的使用:

编译执行多个文件:

gcc -c main.c
gcc -c aaaa.c
gcc -c bbbb.c
gcc -o main main.o aaaa.o bbbb.o

 

使用Makefile:

#  Makefile 文件
mainmain.o aaaa.o bbbb.o
  gcc -o main main.o aaaa.o bbbb.o
main.omain.c aaaa.h bbbb.h
  gcc -c main.c
aaaa.oaaaa.c aaaa.h
  gcc -c aaaa.c
bbbb.obbbb.c bbbb.h
  gcc -c bbbb.c

Makefile文件规则:

  第一行表示依赖关系,第二行是规则

  target:componets(目标:以来对象)

  TAB rule(有个TAB键)

Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件

mainmain.o aaaa.o bbbb.o
  gcc -o $@ $^
main.omain.c aaaa.h bbbb.h
  gcc -c $<

 

一个 Makefile 的缺省规则
..c.o
gcc -c $<
这个规则表示所有的 .o 文件都是依赖与相应的.c 文件的.例如 mytool.o 依赖于 mytool.c
这样 Makefile 还可以变为:
# 这是再一次简化后的 Makefile
mainmain.o aaaa.o bbbb.o
gcc -o $@ $^
..c.o
gcc -c $<

 

3、程序库的链接 

  为了使用数学函数,我们必须和数学库连,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm 

  对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了.

   有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L 选项指定路径.比如说我们有一个库在 /home/hoyt/mylib,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径

 

 4、程序的调试  

  最常用的调试软件是 gdb.在图形界面下调试程序,可以选择 xxgdb.得要在编译的时候加入 -g 选项

 

 

 通过《Linux操作系统下C语言编程入门》(原 文: Hoyt 等,二次制作: AureoLEO)学习整理