make与make脚本 总结

来源:互联网 发布:新仙女木 知乎 编辑:程序博客网 时间:2024/06/05 01:04

Linux中项目代码文件众多的时候,make工具可以 组织项目。 可以把命令行封装到文件。   //Windows里的那种文件的格式是 .bat
项目组织脚本makefile,这个脚本有专门解释工具make
 
make脚本实际上有 一定的严格语法。
    1、make与make脚本关系
       make脚本可以是任意的名字。推荐名字最好命名为  Makefile 或 makefile
      如果名字不是Makefile则需要使用 -f
        make -f  脚本文件。
      如果文件名是Makefile ,则 直接make后,系统会自动搜索出该脚本文件
    
    
    2、make脚本语法
         1)make脚本都是由目标(TARGET)构成的。     //注意:一个目标里可以有多个指令,支持换行
                一个目标就是编译任务(TASK)


         2)目标语法:
         目标名:完成编译目标依赖的文件(其他目标) 或 没有文件也可以的
         Tab键编译的指令    //注意: 必须是Tab键,而且不能空格

注意:
    @这个符号是防止 命令行回显的。

      使用make执行 make脚本的时候,默认每个任务的指令会显示出来。
      如果不显示,就在指令前加个@

    3、make脚本可以有多个目标
       make默认执行第一个目标
       如果想执行指定的目标请使用 目标名:
                 make 目标名
    4、目标之间的关系 ,或目标与文件的关系
       一般情况下,目标都是编译产生文件,所以make建议目标是一个文件。

      但目标不是文件,称为  伪文件。
      伪目标声明的语法:

       .PHONY:伪目标名
       伪目标名:
         指令
 

  make的目标的规则:
           1、伪目标没有任何规则
           2、文件目标
              检测目标依赖的文件(目标)与目标文件的新旧。
              目标文件比目标依赖文件新,make不工作。
     补充:#注释
     应用经验:
        建议把每个阶段编译的结果文件作为目标。
        这样目标就有 执行依赖关系。     //这个执行依赖关系,make工具就会自动调用
        其中的* . o目标自动生成目标
 
        依赖目标使用空格分隔!

 

总结:
    编译是由各个阶段目标构成。每个阶段编译产生一定的文件,所以makefile中主要构成部分就是 目标。

目标分为:
  目标文件,用来比较文件的日期,根据新旧判定是否调用 依赖的目标。
  伪目标,作为依赖,则就会永远被执行。不会去比较文件的新旧。

  依赖目标执行的条件:目标与依赖目标的新旧比较。
       目标,若新:不调用
         旧:调用

 

 5、为了方便,在make脚本中可以定义变量。 
     变量名=值  
     $(变量名)

 

常用的目标如下:
   include
   clean
   install
   all   //若是有多个项目,就用他。 all:demo demo1

 

 

makefile脚本案例1:

SOURCES=demo4.cLIB=libfun.sodemo4:$(SOURCE) $(LIB)gcc demo4.c -lfun -L. -odemo4libfun.so:fun.cgcc -shared -olibfun.so fun.crun:demo4 huandemo4.PHONY:huanhuan:export LD_LIBRARY_PATH=.


 

makefile脚本案例2:

SOURCES=main.cpp frmlogin.cpp netctapp.cpp frmmain.cpp frmadminadd.cppHEADERS=frmlogin.h netctapp.h frmmain.h frmadminadd.hnetct:$(SOURCES)  $(HEADERS)@g++  $(SOURCES) libqcurses.so -o netct -lcursesclean:@rm -f netct
原创粉丝点击