zoukankan      html  css  js  c++  java
  • 编写一个makefile的简单实例

    说明:执行的环境ubuntu 12.04 + gcc

    1.编写源代码(5个文件)

    1)名称为main.c,代码如下:

    #include "my1.h"
    #include "my2.h"
    int main()
    {
         my1_print("hello my1!");
         my2_print("hello my2!");
        return 0;
    }
    

    2)名称为my1.h,代码如下:

    #ifndef _MY_1_H
    #define _MY_1_H
    
    void my1_print(char *print_str);
    
    #endif
    

    3)名称为my2.h,代码如下:

    #ifndef _MY_2_H
    #define _MY_2_H
    
    void my2_print(char *print);
    
    #endif 
    

    4)名称为my1.c,代码如下:

    #include "my1.h"
    #include <stdio.h>
    
    void my1_print(char *print_str)
    {
        printf("This is my2 print %s
    ", print_str);
    }
    

    5)名称为my2.c,代码如下:

    #include "my2.h"
    #include <stdio.h>
    
    void my2_print(char *print_str)
    {
        printf("This is my2 print %s
    ", print_str);
    }
    

    2.编写makefile文件,名称为makefile(或者Makefile),内容如下:

    main:main.o my1.o my2.o
        gcc -o main main.o my1.o my2.o
    main.o:main.c my1.h my2.h
        gcc -c main.c
    my1.o:my1.c my1.h
        gcc -c my1.c
    my2.o:my2.c my2.h
        gcc -c my2.c
    clean:
        rm -f *.o main
    

    3.执行makefile文件。

    3.1执行命令如下:

    make
    

    3.2输出结果如下:

    gcc -c main.c
    gcc -c my1.c
    gcc -c my2.c
    gcc -o main main.o my1.o my2.o
    

    4.最后查看和执行生成文件main。

    file ./main
    

    输出的结果为:

    ./main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2c63c471957d709e4d5a19c75c7eda60cfb2f3e2, not stripped

    ./main
    

    输出的结果为:

    This is my2 print hello my1!
    This is my2 print hello my2!
    

    维基百科介绍:

    在软件开发中,make是一个工具程序(Utility software),经由读取叫做“makefile”的文件,自动化建构软件。它是一种转化文件形式的工具,转换的目标称为“target”;与此同时,它也检查文件的依赖关系,如果需要的话,它会调用一些外部软件来完成任务。它的依赖关系检查系统非常简单,主要根据依赖文件的修改时间进行判断。大多数情况下,它被用来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。它使用叫做“makefile”的文件来确定一个target文件的依赖关系,然后把生成这个target的相关命令传给shell去执行。

  • 相关阅读:
    青松云安全-WAF-1.0.655 (ubuntu 14.04 server)
    相似变换和仿射变换
    参数坐标系统变换
    城市测量坐标系统的建立
    工程测量坐标系
    大地测量控制点坐标转换技术规范
    为什么样本方差(sample variance)的分母是 n-1?
    似大地水准面
    typedef的用法
    同一椭球面经纬度坐标与空间直角坐标之间的相互转换
  • 原文地址:https://www.cnblogs.com/missliuxin/p/3540531.html
Copyright © 2011-2022 走看看