linuxC相关知识--gcc和Makefile的学习

一:gcc

1.gcc hello.c -o hello

   直接编译成可执行文件,其中有四个过程:预处理、编译、汇编、链接,最后生成课执行文件。

(1)预处理:gcc -E hello.c -o hello.i

         把#include <stdio.h> 所包含的文件全部拉到hello.i中;

(2)编译:gcc -S hello.i -o hello.s

          生成汇编文件;

(3)汇编:gcc -c hello.s -o hello.o

         对文件进行汇编处理,生成目标文件.o;

  (4)  链接:gcc hello.o -o hello

        把hello.o目标文件和需要用到库进行链接,生成一个可执行的文件。


常见的文件后缀:

    .c    c文件

    .h    .h文件

    .i    预处理过的c文件

    .o    编译后的目标文件

    .s    汇编语言文件


#include <    .h>    包含的头文件在标准库中

#include "    .h"      包含的头文件在当前目录中,当前找不到会到标准库中查找。


2.生成可调试代码-g

    #gcc -g hello.c -o hello    hello是可以对运行过程进行调试。


3.-Wall    包含告警信息

    #gcc  -Wall hello.c -o hello

    编译过程把告警信息打印出来


4.-w 不包含告警信息

    #gcc -w hello.c -o hello


5.-I  ./w1  寻找当前w1文件夹下的头文件
    hello.c
    #include "hello.h"
    int main()
    {
        printf("hello\n");
        return 0;
    }
 
    hello.h 在./w1下
    #include <stdio.h>
 
    编译时:
    #gcc -I ./w1  hello.c  -o hello
    自动到w1中寻找hello.h


二.Makefile

1.
 目标:依赖文件
<tab> 可执行命令
2.
 
例1:
hello: hello.c
   gcc hello.c -o hello
.PHONY:clean
clean:
   rm -rf  hello
 
3.
 
例2:Makefile
hello: main.o  func1.o func2.o   func3.o
   gcc main.o func1.o func2.o  -o  hello
main.o:main.c
   gcc  -c  main.c
func1.o:func1.c
   gcc -c func1.c
func2.o: func2.c
   gcc -c fun2.c
func3.o:func3.c
   gcc -c func3.c
clean:
   rm -rf main.o func1.o func2.o    func3.o
 
makefile1
#make -f makefile1
 
 
Makfile 可以修改如下:
obj=main.o func1.o func2.o func3.o
hello:$(obj)
   gcc $(obj) -o hello
.......
4. 变量
$^:代表所有的依赖文件
$@: 代表目标
$<: 第一个依赖文件
 
例:
hello:main.o  func1.o  func2.o
   gcc  $^  -o  $@
 
4. $(MAKE) -C subdir  改变makefile的路径的
top dir(根目录)下有源文件main.c、makefile(主)、文件夹sub1、文件夹sub2;子目录sub1里有源
         文件sub1.c和makefile(次1);子目录sub2里有源文件sub2.c和makefile(次2)。
         main.c里有主函数,需要调用sub1.c里的和sub2.c。
         要求通过根目录下的makefile嵌套调用子目录下的makefile来编译,最后链接生成可执行文件edit。
         首先是子目录sub1下的makefile:
         sub1.o : sub1.c
                gcc-c sub1.c
         接下来是子目录sub2下的makefile:
         sub2.o : sub2.c
                gcc -csub2.c
        最后是根目录下的makefile:
 
        VPATH=./sub1 ./sub2
       

       obj=main.o sub1.o sub2.o
      

       edit : $(obj)
              gcc -o edit main.o ./sub1/sub1.o ./sub2/sub2.o
       main.o : main.c
              gcc -cmain.c
       sub1.o : sub1.c
               $(MAKE) -C ./sub1
       sub2.o : sub2.c
               $(MAKE) -C./sub2
      .PHONY : clean
       clean :
               rm editmain.o -fr
               rm./sub1/*.o -fr
               rm./sub2/*.o -fr
 
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值