C高级makefile使用

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 
#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;
}

你可能感兴趣的:(C高级makefile使用)