当前位置:  技术问答>linux和unix

如何在solaris下使用makefile文件进行项目编译

    来源: 互联网  发布时间:2014-12-30

    本文导语:  我原来在windows上开发发现在unxi下大不相同 我用vi编辑器些程序 问题: 1、项目中有我写了好多.c 和.h文件。 2、要用到人家提供的库文件。 最终的exe文件就一个。 我如何得到我的exe文件,我要设置些什么环境变量,...

我原来在windows上开发发现在unxi下大不相同
我用vi编辑器些程序
问题:
1、项目中有我写了好多.c 和.h文件。
2、要用到人家提供的库文件。
最终的exe文件就一个。
我如何得到我的exe文件,我要设置些什么环境变量,要用到些什么命令。麻烦给出思路和具体步骤:
谢谢

|
给你一个帖子
文章摘要: 
    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install,有效的利用make和makefile工具可以大大提高项目开发的效率。但令人遗憾的是,在许多讲述Linux应用的书籍上都没有详细介绍这个功能强大但又非常复杂的编译工具。在这里我就向大家详细介绍一下make及其描述文件makefile。  
         
 
正文:      
Linux/Unix环境下的make和makefile详解    
Pathetique 
    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。
    但令人遗憾的是,在许多讲述Linux应用的书籍上都没有详细介绍这个功能强大但又非常复杂的编译工具。在这里我就向大家详细介绍一下make及其描述文件makefile。

Makefile文件

    Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。
    在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:
    $ make -f Makefile.debug
    例如,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。即在filea.c和fileb.c里都有这样的声明:
    #include "defs"
    那么下面的文档就描述了这些文件之间的相互联系:
    ---------------------------------------------------------
      #It is a example for describing makefile
      prog : filea.o fileb.o filec.o
      cc filea.o fileb.o filec.o -LS -o prog
      filea.o : filea.c a.h defs
      cc -c filea.c
      fileb.o : fileb.c b.h defs
      cc -c fileb.c
      filec.o : filec.c c.h
      cc -c filec.c
    ----------------------------------------------------------
   这个描述文档就是一个简单的makefile文件。
    从上面的例子注意到,第一个字符为 # 的行为注释行。第一个非注释行指定prog由三个目标文件filea.o、fileb.o和filec.o链接生成。第三行描述了如何从prog所依赖的文件建立可执行文件。接下来的4、6、8行分别指定三个目标文件,以及它们所依赖的.c和.h文件以及defs文件。而5、7、9行则指定了如何从目标所依赖的文件建立目标。
    当filea.c或a.h文件在编译之后又被修改,则 make 工具可自动重新编译filea.o,如果在前后两次编译之间,filea.C 和a.h 均没有被修改,而且 test.o 还存在的话,就没有必要重新编译。这种依赖关系在多源文件的程序编译中尤其重要。通过这种依赖关系的定义,make 工具可避免许多不必要的编译工作。当然,利用 Shell 脚本也可以达到自动编译的效果,但是,Shell 脚本将全部编译任何源文件,包括哪些不必要重新编译的源文件,而 make 工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。
Makefile文件作为一种描述文档一般需要包含以下内容:
    ◆ 宏定义
    ◆ 源文件之间的相互依赖关系
    ◆ 可执行的命令
    Makefile中允许使用简单的宏指代源文件及其相关编译信息,在Linux中也称宏为变量。在引用宏时只需在变量前加$符号,但值得注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号()。
    下面都是有效的宏引用:
    $(CFLAGS)
    $2
    $Z
    $(Z)
    其中最后两个引用是完全一致的。
    需要注意的是一些宏的预定义变量,在Unix系统中,$*、$@、$?和$

    
 
 

您可能感兴趣的文章:

  • solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
  • 请问各位高手,怎么样在windows上通过批处理脚步启动solaris上的编译器,实现自动编译?(solaris通过telnet登陆)?
  • solaris2.6下安装c编译器问题 iis7站长之家
  • 在linux+x86下用交叉编译器编译出能在solaris+x86运行的文件时遇到的问题
  • solaris 如何编译库
  • Solaris下编译器版本不同,编译后的物件大小不同?
  • 关于solaris安装,安装C/c++编译器的问题
  • solaris的编译环境的问题
  • 请问哪有Solaris下的GCC编译器下载??
  • solaris 安装cc编译器
  • solaris2.6下安装c编译器问题
  • 求Solaris下的GCC编译器
  • solaris9 静态库编译出错
  • 请教如何在solaris 8上安装c编译器
  • Solaris系统下,使用gcc编译程序,请问采用1字节对齐应该怎样设置
  • solaris下一个编译错误~请高人解答
  • 在sun solaris 8系统下有没有具编辑、编译、调试一体的集成C(C++)开发工具?谢谢!
  • solaris 下gcc 编译出错.
  • 晕了,solaris系统下,使用gcc -g选项编译出的程序,怎么没有调试信息
  • solaris下cc编译器连接时出错?
  • solaris下的makefile文件包含的shell脚本不执行
  • 如何写出兼容于BSD MAKE、GNU MAKE、SOLARIS MAKE的条件编译Makefile?
  • 求教solaris下Makefile的编写
  • Solaris下的Makefile问题
  • 奇怪:为什么我的Solaris上执行configure后生成的Makefile文件里面会有很多错误的指令?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SOLARIS下用C进行中文显示的问题?
  • 如何进行Solaris远程访问?
  • 高分求救:我的solaris8如何进行网络配置?解决立即送分!
  • 在solaris10下,如何才能正确的进行相关设置后,调用sendmail来发送一封邮件?(外部邮箱)
  • SOLARIS下一个文件老是遭到修改,可有办法进行监控
  • solaris环境下如何进行时间的加减运算啊?
  • Solaris中,我对未初始化的char*进行strlen()操作不报错! 初学.请多帮忙
  • 【急急】solaris下,如何将LDAP文件进行导入导出呢?如何创建顶级用户呢?
  • 在solaris上如何进行数据的备份和恢复?
  • solaris 8上能用gcc for solaris7 或 solaris9的版本吗?
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • 请问Solaris现在最高的版本是多少?Solaris8.0价格如何?Solaris8.0和Red Hat Enterprise Linux AS 3.0有何区别?
  • 请教solaris高手一个solaris安装问题
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • 请问:SOLARIS(for intel)如何装d-link网卡。哪儿下Solaris电子文档。
  • Solaris for X86 和Solaris for Sparc主要区别在哪?
  • 请问Solaris的优势?Solaris下开发相关及系统管理相关资料是否有提供?谢谢
  • telnet 进去的时候我看写着SUN OS5.8,这个是不是Solaris?我找不到Solaris5.8的软件?
  • 没有光碟,怎样从solaris8升级到solaris9?
  • solaris 10能不能远程桌面连接Solaris 10(或 Linux) ,不要安装其他软件
  • 我装了Solaris后,98和2000都找不到了,启动时直接进入Solaris,该怎么办,请高手指点!
  • solaris开发一窍不通,如何开发Solaris下的c程序?
  • 想用Virtual PC虚拟UNIX,求Solaris 10 ,Solaris 10 for x86版或已经设置好的虚拟文件?
  • 怎么修改IP(SOLARIS),怎么在WIN上用EXTRX!X连上SOLARIS
  • solaris 10 下怎么安装jdk-6u5-solaris-i586.sh? ftp上传大文件中断怎么解决?
  • 专门为难solaris高手,之solaris10的修改最大TCP连接数问题
  • solaris root 的shell搞错了,提示 no shell root 进不了!(solaris 8 for x86)
  • 请问:PC版本的solaris9与sun的solaris9的区别,并且哪里有PC版本SOLARIS9的下载?
  • 双系统windows和solaris,windows下有两个分区c盘和d盘,在solaris下可以挂在c盘,但找不到d盘


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3