zoukankan      html  css  js  c++  java
  • MakeFile

    MakeFile  

      MakeFile关系到整个工程的编译规则。一个工程的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是-----“自动化编译”,一旦写好,只需要一个makefile命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GUN的make.可见,makefile都成为了一种在工程方面的编译方法。

    关于程序编译和链接

      一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(Compile)。然后再把大量的Object File合成执行文件,这个动作叫做链接(link)。

      编译时,编译器需要的是语法正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般说来,每个源文件都应该对应于一个中间目标文件(O文件或者OBJ文件)。

      链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或者OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间文件(Object File),在大多数时候,由于源文件太多,编译生成的目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在windows下这种包叫“库文件(Library File)”,也就是.lib文件,在UNIX下,是Archive File,也就是.a文件。

      总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那就会报链接错误码(Linker Error),在vc下,这种错误一般是:Link 2001错误,意思就是说,链接器未能找到函数的实现。你需要指定函数的ObjectFile。

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/QoQian/p/4932502.html
Copyright © 2011-2022 走看看