C高级技术
makefile使用
- 编译工具GCC
- 源文件(.c)--->预处理(.i)--->汇编(.s)--->目标(.o)--->链接(*.exe)
gcc -E main.c -o main.i gcc -S main.i -o main.s gcc -c main.s -o main.o gcc main.o -o main ./main->可执行
- makefile文件的编写
一个工程里文件不计其数,其按类型功能与模块分别放在若干个目录里。
makefile制定了哪些需要重新编译哪些不要。
#FINAL:=main
#OBJECTS:=a.o b.o #代表后面所有的依赖文件
#$(FINAL):$(OBJECTS)
# gcc $^ -o $(FINAL)#$^代表左边第一个依赖文件
#a.o:a.c
# gcc -c $< -o a.o
#b.o:b.c
# gcc -c $< -o b.o
#clean:
# rm *.o $(FINAL)
FINAL:=main
OBJECTS:=a.o b.o #代表后面所有的依赖文件
$(FINAL):$(OBJECTS)
gcc $^ -o $(FINAL)#$^代表左边第一个依赖文件
%.o:%.c
gcc -c $< -o $@
clean:
rm *.o $(FINAL)
多文件联合编译
#include <stdio.h>
#include "b.h"
- #include "b.h"理论上只能包含一次,但是如果重复包含了就会出现错误,所以我们使用#ifndef b_h--->#define b_h--->#endif.在第二次调用的时候,不符合#ifndef.所以不会重复出现.
extern int c;:extern外部找c,只起声明作用,表示当前用到得c要去外部文件找同名变量是用auto修饰的.
int main()
{
// c=0;//得到的值为0
printf("c=%d",c);
return 0;
}
- c.c用static修饰全局变量,代表当前这个变量智能被当前的文件访问,外部文件访问不到.
//<>:代表直接去系统库找,""代表先到当前目录下找,如果当前目录下找不到就会去系统找.
extern int sum(int,int);//因为i包含了头文件"c.h".
int main()
{
int c=sum(1,2);
printf("sum=%d\n",c);
return 0;
}
网友评论