• Linux cc与gcc


    三个源文件:main.c sum.c show.c

    /* main.c */  
      
    extern int sum(int m, int n);  
    extern void show(int data);  
      
    int main(void)  
    {  
      
        show(sum(3, 5));  
      
        return 0;  
    }  
    
    /* sum.c */  
      
    int sum(int m, int n)  
    {  
        return m+n;  
    }  
    
    /* show.c */  
      
    #include <stdio.h>  
      
    void show(int data)  
    {  
        printf("%d
    ", data);  
    }  

    Makefile大体上有两种写法:

    (第一种)

    #Makefile  
      
    objs=main.o sum.o show.o  
    main:$(objs)  
        gcc $^ -o $@  
    main.o:main.c  
        gcc -c $<  
    sum.o:sum.c  
        gcc -c $<  
    show.o:show.c  
        gcc -c $<  
    clean:  
        rm -rf *.o .*.sw?  

    (第二种)

    /* Makefile */  
      
    objs=main.o sum.o show.o  
    main:$(objs)  
        gcc $^ -o $@  
    clean:  
        rm -rf *.o .*.sw?  

    下面列举以上两种的编译过程:

    (第一种)

    cc -c -o main.o main.c

    cc -c -o sum.o sum.c

    cc -c -o show.o show.c

    gcc main.o sum.o show.o -o main

    (第二种)

    gcc -c main.c

    gcc -c sum.c

    gcc -c show.c

    gcc main.o sum.o show.o -o main


    以上两种Makefile写法都能正确编译和输出,此时很容易看出区别,虽然第二种看起来省略很多,但是各有利弊,下面介绍异同:

    1、写的makefile的时候我们是可以省略生成.o文件那一步,直接由C文件生成的(源文件比较少时OK);

    2、编译的时候,目录里面没有main.o  sum.o show.o这个文件,但是硬要强制去编译这个的话,系统就会用cc自动先把相关的.c文件转化成相关的.o文件;

    3、第二种(简单的)方法可以用(但是建议不要这么用),如果编译的文件比较多,而且彼此之间交叉的多的时候,容易出问题,如果出了问题,处理的时候就不容易查找问题 ;

    4、要是找别人给你调试Makefile的时候,别人会看不懂。

  • 相关阅读:
    python中对一个列表进行乱序
    GPU比CPU慢?可能模型太简单
    VLAN之间单臂路由通信
    数据结构_顺序栈的代码实践
    MarkDown语法学习
    【转载】给想要入门渗透的人的忠告——schiz0wcingU
    SQL注入原理及绕过安全狗
    Python学习---字符串处理
    【转载】RAID写惩罚(Write Penalty)与IOPS计算
    Kali安装使用文泉驿字体
  • 原文地址:https://www.cnblogs.com/lialong1st/p/7756664.html
Copyright © 2020-2023  润新知