windows下c语言的编译
1、预处理
把.h .c展开形成一个文件。宏定义直接替换,还有头文件、库文件的展开形成.i文件
对应的GCC
gcc -e hello.c -o hello.i
2、汇编
生成汇编文件
gcc -s hello.i -o hello.s
3、编译
生成一个.o .obj
gcc -c hello.s -o hello.o
4、链接
windows下生成.exe linux下生成.elf
gcc hello.o -o hello
linux下的编译-Makefile
根据我通过视频的学习,现在文件夹下touch一个Makefile名称的文件,然后进行编辑。
找不到Makefile的代码块,所以用c语言代码块进行书写。
# 代表注释
目标文件:依赖文件
[TAB]指令
hello:hello.c
gcc hello.c -o hello
//然后在当前目录下使用 make 指令即可
伪命令
.PHONY:
clear:
rm -rf hello
clearall:
rm -rf /*
//在当前目录下使用指令 make clear 指令进行调用,这会执行clear后的指令
恒等替换
// = 代表替换, :=代表恒等于, +=代表追加
TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
//在使用时要注意 $() 的格式
通配符的使用
// %.c 代表任意一个c文件 *.c 代表所有任意的c文件
TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
%.o:%.c
$(CC) -c %.c -o %.o
// $^ 代表所有的依赖文件, $@ 所有的目标文件, $< 所有依赖文件的第一个文件.................
最终一个例子
假如在目录下有1.c 2.c .3c,我要将他们编译成一个test输出。
test:1.o 2.o 3.o
gcc 1.o 2.o 3.o -o test
1.o:1.c
gcc -c 1.c -o 1.o
2.o:2.c
gcc -c 2.c -o 2.o
3.o:3.c
gcc -c 3.c -o 3.o
.PHONY:
clearall:
rm -rf 1.o 2.o 3.o test
clear:
rm -rf 1.o 2.o 3.o
//加强版
TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc
RM := rm -rf
$(TAR):$(OBJ)
$(CC) $@ -o $^
%.o:%.c
$(CC) -c %.c -o %.o
.PHONY:
clearall:
$(RM) 1.o 2.o 3.o test
clear:
$(RM) -rf 1.o 2.o 3.o