zoukankan      html  css  js  c++  java
  • 学习Makefile

    1> 编译一个文件
    2> 编译多个文件
    3> 编译多个目录下的文件
    4> inclue makefile
    5> 使用规则
    1>
    target:depend
    [tab]cmd
    depnd:file
    [tab]cmd
    举例如下
    test:main.o
    [tab]gcc -o test main.o
    main.o:main.c
    [tab]gcc -o main.o -c main.c

    2>
    2.1 目标文件依赖多个文件

    CC = gcc
    
    #INC =  -I./include/
    #LIBVAR = -lpthread
    #LIBPATH = -L./lib
    
    #CFLAGS ?= -O2 -g
    
    OBJS := main.o
    OBJS += add.o
    OBJS += sub.o
    
    SRCS := main.c
    SRCS += add.c
    SRCS += sub.c
    TARGET = test
    
    $(TARGET):$(OBJS)
            $(CC) $(INC) $(CFLAG) -o $@ $^ $(LIBVAR) $(LIBPATH)
            @echo "build success"
    
    $(OBJS):$(SRCS)
            $(CC) $(INC) $(CFLAG) -c $^ $(LIBVAR) $(LIBPATH)
    
    clean:
            rm -rf $(OBJS) $(TARGET)
    
    install:
            @echo "do nothing"

    2.2 生成多个目标文件,我们可使用伪目标

    CC = gcc
    
    #INC =  -I./include/
    #LIBVAR = -lpthread
    #LIBPATH = -L./lib
    #CFLAGS ?= -O2 -g
    #SRCS =
    
    OBJS := hello.o
    OBJS += test.o
     
    TARGET = test hello
    
    all:$(TARGET)
    @echo "success to build" test:test.c $(CC) $(INC) $(CFLAGS)
    -o $@ $^ $(LIBVAR) $(LIBPATH) hello:hello.c $(CC) $(INC) $(CFLAGS) -o $@ $^ $(LIBVAR) $(LIBPATH) clean: rm -rf $(OBJS) $(TARGET) install: @echo "do nothing"

    $@ 表示目标文件

    $^ 表示所有依赖项

    $< 表示第一个文件

    简化makefile 如下:

    CC = gcc
    
    #INC =  -I./include/
    #LIBVAR = -lpthread
    #LIBPATH = -L./lib
    #CFLAGS ?= -O2 -g
    #SRCS =
    
    #wildcard对.c文件进行展开
    SRCS = $(wildcard ./*.c)
    
    OBJS  = $(patsubst %.c, %.o, $(SRCS))
    
    #将SRCS中后缀.c替换成空,即可执行程序的名字与c名字相同
    TARGET  = $(patsubst %.c, %, $(SRCS))
    
    all:$(TARGET)
        @echo "success to build"
    
    $(TARGET):$(OBJS)
        gcc $< -o $@
    
    $(OBJS):$(SRCS)
        gcc -c $<
    
    clean:
            rm -rf $(OBJS) $(TARGET)
    
    install:
            @echo "do nothing"
  • 相关阅读:
    SQL单表查询
    SQL基础
    python生成器yield和send
    python模块
    python异常
    python单例设计模式
    python类方法、类属性和静态方法
    python继承
    react native window下的环境搭建和调试方案
    打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
  • 原文地址:https://www.cnblogs.com/jyfyonghu/p/10526209.html
Copyright © 2011-2022 走看看