zoukankan      html  css  js  c++  java
  • Makefile 开发环境全能管家

    变量的应用:

    CC=gcc 

    RM=rm

    EXE=main.exe

    OBJS=目标

    伪目标的应用:

    .PHONY:clean

    自动变量的应用:

    $@:表示一个规则的目标

    $^:表示的是规则中的所有的先决条件

    $<:表示的是规则中的第一个先决条件;

    变量的类别:递归扩展变量和简单扩展变量。

    变量的条件赋值 :?=表示条件是否已经赋值了,如果没有则赋值;

    高级变量的引用功能:在赋值的同时完成文件名后缀的替换工作;

    避免变量被覆盖的方法:在变量前加override;

    借助模式精简规则:% 表示通陪符

    通过函数增强功能:

    wildcard:当前目录下满足模式下的所有文件或者目录名列表;

    例如l: $(wildcard *.c)

    patsubst:,模式替换;

    例如:$(patsubst %.c %.o $(RSCS))

    让编译环境更加有序:

    1,目标文件与最终生成的可执行文件不在同一目录中;

    目录的自动创建与删除:

     以后有不懂的地方可以查看这个源程序

    .PHONY: all clean 

    MKDIR = mkdir

    RM = rm

    RMFLAGS = -rf

    CC = gcc

    DIR_OBJS = objs

    DIR_EXES = exes

    DIR_DEPS = deps

    DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)

    EXE = main.exe

    EXE := $(addprefix $(DIR_EXES)/,$(EXE))

    SRCS = $(wildcard *.c)

    OBJS = $(SRCS:.c=.o)

    OBJS :=$(addprefix $(DIR_OBJS)/,$(OBJS))

    DEPS = $(SRCS:.c=.dep)

    DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))

    all: $(DIRS) $(EXE)

     

    $(DIRS):

    $(MKDIR) $@

    $(EXE): $(OBJS)

    $(CC) $^ -o $@

    $(DIR_OBJS)/%.o: %.c 

    $(CC) -c $^ -o $@

    $(DIR_DEPS)/%.dep: %.c

    @echo "creating $@ ...."

    @set -e; 

    $(RM) $(RMFLAGS) $@.tmp; 

    $(CC) -E -MM $^ > $@.tmp ;

    sed 's,(.*).o[ :]*,objs/1.o: ,g' < $@.tmp > $@ ;

    $(RM) $(RMFLAGS) $@.tmp

    clean:

    $(RM) $(RMFLAGS) $(DIRS)

  • 相关阅读:
    Java基础学习篇---------static
    Java基础学习篇---------this、object的学习
    Java基础学习篇---------String、集合的学习
    Java基础学习篇---------多态
    Java基础学习篇---------继承
    Java基础学习篇---------封装
    Java基础学习篇---------多线程
    Handler主线程和子线程相通信
    Handler的使用
    c# DataGridView操作
  • 原文地址:https://www.cnblogs.com/wbtn6262/p/3771038.html
Copyright © 2011-2022 走看看