zoukankan      html  css  js  c++  java
  • VxWorks操作系统MakeFile(三)

    时间:2008-9-6 夜

    版权申明:本文为水煮鱼为 水煮鱼@博客园 撰写,不得用于商业用途,如需摘用,请与水煮鱼联系。

    Makefile的结构:


    一般编译的步骤为:

    1、将每一个单独的源代码文件首先编译成为目标文件。

    2、通过链接器,将目标文件连接成为可执行文件。

    由于本文只讨论vxworks中的makefile,因此本文主要以常用的gcc为例。

    通过-c开关,可以使用gcc将源文件编译成为期望的目标文件。生成文件以.o为后缀名。然后通过命令gcc -o exec_filename *.o,将生成的目标文件连接成为可执行文件。在gcc中,生成的可执行文件以.out为后缀名。

    对于一个多文件的项目,这些非常繁琐。但是GNU Make工具让一切都可以变得很简单。

    GUN Make的输入是一个文本文件:makefile。在这个文件中,主要描述了目的文件是从那些依靠文件中产生的关联关系。根据文本中描述的关系,make通过检查磁盘上的文件,如果目的文件的时间戳比至少它一个依靠文件的时间戳旧的话,make工具将执行相应的命令,以更新目的文件。

    一个makefile主要含有以下的规则:

    :....

    (tab)<command>

    (tab)<command>

    .

    .

    .

    例:

    ====make file 开始====

    myprog:foo.o bar.o

     gcc foo.o bar.o -o myprog

    foo.o: foo.c foo.h bar.h

     gcc -c foo.c -o foo.o

    bar.o: bar.c bar.h

     gcc -c bar.c -o bar.o

    ====make file 结束====


     这是一个非常典型的makefile。

     make从最上面开始,把上面第一个目的, "myprog",作为它的主要目标。给出跪着说明只要文件"myprog"比文件"foo.o"或者"bar.o"中的任何一个旧,则下一行命令将会被执行。

    但是在检查文件foo.o和bar.o的文件戳之前,它会往下查找那些把foo.o或者bar.o作为目标文件的规则,以此递归,直到找到最新的目标文件,并执行该目标文件下的命令。 从此可以看出,make工具通过这种递归查找最新时间戳的方式,保证当你修改任何代码的时候(可能是只有修改了一个源码文件,或者一个头文件),保证与之关联的文件都可以被编译。

    当然,你必须保证你在makefile中写的编译规则,都是正确的,只列出了那些在源码文件中被包括的头文件。

    下一部分中,将主要讲如何编写makefile文件。

  • 相关阅读:
    配置Podfile 一个工程内的多个Target
    iOS开发中的测试框架
    iOS 设置button文字过长而显示省略号的解决办法
    iOS界面的绘制和渲染
    iOS单元测试
    iOS消息转发机制
    对runtime的总结:让你会用Runtime
    Xcode的Refactor使用
    工厂设计模式
    iOS中的数据存储
  • 原文地址:https://www.cnblogs.com/shuizhuyu/p/1285821.html
Copyright © 2011-2022 走看看