• Linxu程序构建-Makefile


    Makefile程序编译控制,表明程序应该如何构造,通过多个输入来生成输出文件时,手册页的编写以及将应用程序安装到目标目录,都可以使用Makefile

    makefile语法:

    文件由一组依赖关系和规则构成,每个依赖由一个目标(将要创建的文件)和一组该目标所依赖的源文件组成。

    make命令的选项和参数:

    -k 让make命令在发现错误时仍然继续执行,而不是检测到第一个错误时就停止

    -n 让make输出将要执行的操作步骤,而不真正执行这些操作

    -f <filename> 告诉系统哪个文件时Makefile文件,否则将首先搜索makefile,不存在则搜索Makefile(建议使用)

     
    #Makefile myapp.1是myapp的说明文件 在makefile中生成 all: … 生成所有需要的目标
    
    all: myapp myapp.1

    如果不指定all,则makefile只会创建在Makefile中找到的第一个目标

    宏: 定义与引用,一般用于替换可能改变的,多出出现的字符串 如编译器(gcc cc c89)之间的切换 debug版本与release版本之间的切换

       

    MACRONAME=value "MACRONAME = value" (在外部调用makefile给定宏定义时,有空格,需要用引号)

    ${MACRONAME} $(MACRONAME) $MACRONAME 三种,推荐前两种

    例子:

    all: myapp
    # Which compiler
    CC = gcc
    # Where to install
    INSTDIR = /usr/local/bin
    # Where are include files kept
    INCLUDE = .
    # Options for development
    CFLAGS = -g -Wall -ansi
    # Options for release
    # CFLAGS = -O -Wall -ansi
    
    myapp: main.o 2.o 3.o
        $(CC) -o myapp main.o 2.o 3.o
    main.o: main.c a.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
    2.o: 2.c a.h b.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
    3.o: 3.c b.h c.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
    
    clean:
        -rm main.o 2.o 3.o # -rm 可以排除删除不存在文件导致的错误警告 -f 也可以 按理说 -f更好用
    
    install: myapp
        @if [ -d $(INSTDIR) ]; 
        then 
            cp myapp $(INSTDIR);
            chmod a+x $(INSTDIR)/myapp;
            chmod og-w $(INSTDIR)/myapp;
            echo "Installed in $(INSTDIR)";
        else 
            echo "Sorry, $(INSTDIR) does not exist";
        fi

    makefile提供了简单的函数库管理方法,可以方便的将生成的.o文件添加到.a库文件之后

    1 .c.a:
    2     $(CC) -c $(CFLAGS) $<
    3     $(AR) $(ARFLAGS) $@ $*.o

    make -jN #允许make同时执行N条命令,项目的不同部分可以彼此独立的进行编译时,可以缩短编译时间

    gcc -MM main.c xxx.c //gcc编译器将扫描源文件的include语句 然后生成一种可以直接插入到makefile文件的依赖关系

      

  • 相关阅读:
    JAVA中==与equals的区别
    spring面试重点
    struts2
    每个新手程序员必看的 SQL 指南
    QueryRunner的使用
    jquery GET POST
    jquery添加元素
    jquery 滑动动画
    jdbc 安装驱动
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  • 原文地址:https://www.cnblogs.com/Mrwang-tju/p/12468623.html
Copyright © 2020-2023  润新知