预处理 在预处理阶段,编译器主要是加载头文件,宏替换,条件编译的作用,一般处理带"#"的语句
gcc -E main.c > main.i编译 在编译过程中,编译器主要是进行语法检查,在确认所有的指令都符合语法规则之后,将其翻译成中间代码或是汇编代码。
gcc -S main.i -o main.s汇编 汇编阶段主要是把编译阶段产生的.s文件转成二进制目标码
gcc -c main.s -o main.o链接 在成功汇编后就进入了链接阶段,链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到内存里执行。
gcc main.o -o mainMakefile:
all: gcc main.c test.c因为没有依赖,所以无法判断依赖的时间是不是比目标新,所以make之后总是会执行命令
解决以上问题:
a.out: main.c test.c gcc main.c test.c增加依赖之后:
如果a.out不存在,则会执行命令如果依赖的比目标新,则会执行命令
“:=” 立即赋值 “=” 延时赋值 “?=” 条件赋值 如果没有赋过值 就赋值 否则不赋值 “+=” 追加赋值
B := $A #立即赋值 C = $A #延时赋值 A = 10 D = 20 D ?= $A #条件赋值 E = 30 E += $A #追加 test: @echo "B = $B" @echo "C = $C" @echo "D = $D" @echo "E = $E"输出结果: B = C = 10 D = 20 E = 30 10