1.gcc的简易用法:
# 仅将原始码编译成为目标档,并不制作连结等功能:
gcc -c hello.c
# 会自动的产生 hello.o 这个文件,但是并不会产生 binary 运行档。
# 在编译的时候,依据作业环境给予最佳化运行速度
gcc -O hello.c -c
# 会自动的产生 hello.o 这个文件,并且进行最佳化喔!
# 在进行 binary file 制作时,将连结的函式库与相关的路径填入
gcc sin.c -lm -L/usr/lib -I/usr/include
# 这个命令较常下达在最终连结成 binary file 的时候,
# -lm 指的是 libm.so 或 libm.a 这个函式库文件;
# -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
# -I 后面接的是原始码内的 include 文件之所在目录。
# 将编译的结果输出成某个特定档名
gcc -o hello hello.c
# -o 后面接的是要输出的 binary file 档名
# 在编译的时候,输出较多的信息说明
gcc -o hello hello.c -Wall
# 加入 -Wall 之后,程序的编译会变的较为严谨一点,
# 所以警告信息也会显示出来!
2.makefile 的编写规则:
标的(target): 目标档1 目标档2
<tab> gcc -o 欲创建的运行档 目标档1 目标档2
- 在 makefile 当中的 # 代表注解;
- <tab> 需要在命令行 (例如 gcc 这个编译器命令) 的第一个字节;
- 标的 (target) 与相依文件(就是目标档)之间需以『:』隔开。
# 1. 先编辑 makefile 来创建新的守则,此守则的标的名称为 clean :
[...]# vi makefile
main: main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
rm -f main main.o haha.o sin_value.o cos_value.o
# 2. 以新的标的 (clean) 测试看看运行 make 的结果:
[...]# make clean <==就是这里!透过 make 以 clean 为标的
rm -rf main main.o haha.o sin_value.o cos_value.o
如果想要先清除目标档再编译 main 这个程序的话,就可以这样输入:make clean main
我们可以再藉由 shellscript 那时学到的『变量』来更简化 makefile
[...]# vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}
与 bash shell script 的语法有点不太相同,变量的基本语法为:
- 变量与变量内容以『=』隔开,同时两边可以具有空格;
- 变量左边不可以有 <tab> ,例如上面范例的第一行 LIBS 左边不可以是 <tab>;
- 变量与变量内容在『=』两边不能具有『:』;
- 在习惯上,变量最好是以『大写字母』为主;
- 运用变量时,以 ${变量} 或 $(变量) 使用;
- 在该 shell 的环境变量是可以被套用的,例如提到的 CFLAGS 这个变量!
- 在命令列模式也可以给予变量。