• 简单实用的Makefile


    第一种:

    # 目录树结构如:
    # .
    # ├── exec
    # ├── exec.c
    # ├── fork
    # ├── fork.c
    # ├── Makefile
    # 对于自己做的一些小练习,用这样的Makefile非常方便
    
    SRC = $(wildcard *.c)
    TARGETS = $(patsubst %.c, %, $(SRC))    # get targets name without .c
    CC = cc
    
    all: $(TARGETS)
    
    %: %.c
    $(CC) $< -o $@
    
    .PHONY: clean
    clean: 
    rm -rf $(TARGETS)

    第二种:

    # 目录树如下:
    # .
    # ├── h
    # │   ├── main.h
    # │   └── print.h
    # ├── makefile
    # ├── output
    # │   └── a.out.1.0.0
    # └── src
    #     ├── main.c
    #     ├── main.o
    #     ├── print.c
    #     └── print.o
    
    # makefile - enterprise version
    
    VERSION = 1.0.0                                         #版本号
    TARGET = a.out                                          #生成的可执行文件名
    SOURCE = $(wildcard src/*.c)                            #各个源文件
    OBJ = $(patsubst %.c, %.o, $(SOURCE))                   #对应的各中间文件.o
    
    INCLUDES = -I ./h                                       #头文件的包含路径
    CFLAGS = -Wall -c                                       #gcc编译选项
    DEBUG = -D HELLO                                        #debug选项:-D后加程序中的#ifdef SYMBOL,相当于定义了该符号
    #LIBS =                                                 #库文件路径
    CC = cc                                                 #定义CC
    
    $(TARGET): $(OBJ)                                       #目标文件依赖
        @mkdir -p ./output                                  #创建目录但不回显
        $(CC) $(OBJ) -o ./output/$(TARGET).$(VERSION)       #可执行文件名后跟版本号,便于区分版本
    
    %.o: %.c                                                #中间文件依赖,这里%符的使用:对于所有的n个xx.c,有相应的xx.o,相当于展开为n个依赖关系,这种写法很简洁
        $(CC) $(INCLUDES) $(DEBUG) $(CFLAGS) $< -o $@       #$<代表依赖列表的第一个文件,$@代表目标文件
    
    .PHONY: clean
    clean:
        -rm -rf $(TARGET) $(OBJ) ./output/*
  • 相关阅读:
    Xcode8中Swift3.0适配问题
    Swift3.0语法变化
    一起聊聊 Swift 3.0
    Swift 3.0 的 open,public,internal,fileprivate,private 关键字
    leetcode先刷_Binary Tree Level Order Traversal II
    java + memcached安装
    POJ 2533-Longest Ordered Subsequence(DP)
    网络协议——IP
    使用百度地图——入门
    取消延时功能
  • 原文地址:https://www.cnblogs.com/uestcliming666/p/13338781.html
Copyright © 2020-2023  润新知