zoukankan      html  css  js  c++  java
  • makefile一例

        尝试编写了第一个makefile,此makefile支持:

        1、源码、编译中间文件、目标文件 区分目录存放;

        2、程序A、程序B分开编译,公用部分自动编译;

     1 CC = g++
     2 ifeq ($(cpu), arm)
     3     CC := arm_g++
     4 endif
     5 
     6 CURR_DIR = $(shell pwd)
     7 OBJ_DIR  = build
     8 BIN_DIR  = bin
     9 VPATH    = code : code/aa : code/bb
    10 CXXFLAGS = -I$(CURR_DIR)/code/platform -I$(CURR_DIR)/code
    11 
    12 
    13 #
    14 libSource = $(notdir $(wildcard code/*.cpp))
    15 libObjs = $(libSource:%.cpp=$(OBJ_DIR)/%.o)
    16 
    17 $(libObjs): $(OBJ_DIR)/%.o : %.cpp
    18     $(CC)  -c $(CXXFLAGS) $< -o $@
    19 
    20 #make aa
    21 aaSource = $(notdir $(wildcard code/aa/*.cpp))
    22 aaObjs = $(aaSource:%.cpp=$(OBJ_DIR)/%.o)
    23 
    24 aa: $(aaObjs) $(libObjs)
    25     $(CC)  -o $(BIN_DIR)/$@ $^
    26     @echo done
    27 
    28 $(aaObjs): $(OBJ_DIR)/%.o : %.cpp
    29     $(CC)  -c $(CXXFLAGS) $< -o $@
    30 
    31 
    32 #make bb
    33 bbSource = $(notdir $(wildcard code/bb/*.cpp))
    34 bbObjs = $(bbSource:%.cpp=$(OBJ_DIR)/%.o)
    35 
    36 bb: $(bbObjs) $(libObjs)
    37     $(CC)  -o $(BIN_DIR)/$@ $^
    38     @echo done
    39 
    40 $(bbObjs): $(OBJ_DIR)/%.o : %.cpp
    41     $(CC)  -c $(CXXFLAGS) $< -o $@
    42 
    43 
    44 #make clean
    45 .PHONY : clean
    46 clean:
    47     rm -fr $(OBJ_DIR)/*.o
    48 
    49 
    50 
    51 #打印变量
    52 #一种方式:$(shell echo $(aaObjs) > readme.txt )
    53 show:
    54     @echo "CC        : "$(CC)
    55     @echo "curr dir  : "$(CURR_DIR)
    56 #命令tab开头
    57 #@echo时命令不显示,echo时命令显示
    58 
    59 #赋值
    60 # = 是最基本的赋值(类似宏替换)
    61 # := 是覆盖之前的值(类似C语句)
    62 # ?= 是如果没有被赋值过就赋予等号后面的值
    63 # += 是添加等号后面的值
    64 
    65 #函数调用
    66 # return = $(functionname  arg1,arg2,arg3...)
    67 # wildcard  返回文件名,包括路径,例如:SRC = $(wildcard *.c ./foo/*.c) 
    68 # notdir 去除文件路径,例如:SRC = $(notdir wildcard)
    69 # patsubst 替换,例如:OBJ = $(patsubst %.c %.o $(SRC))
    70 
    71 #指定源文件路径
    72 # VPATH = dir1 : dir2
    73 # 另外vpath用来定义查找的路径与匹配的模式
    74 
    75 #静态模式
    76 # <targets ...>: <target-pattern>: <prereq-patterns ...>
    77 # <commands>
    78 # $< 表示所有的依赖目标集
    79 # $@ 表示目标集
  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/7102125.html
Copyright © 2011-2022 走看看