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 # $@ 表示目标集
  • 相关阅读:
    死锁程序示例
    用Intellij打可执行jar包
    Semaphore tryAcquire release 正确的使用方法
    计算对象占用空间工具类
    mysql高效分页方案及原理
    乐视秒杀:每秒十万笔交易的数据架构解读
    mysql 联合索引(转)
    mysql中in和exists二者的区别和性能影响
    怎样避免 i f 判断过多,全复杂度较高,代码不美观的问题?
    Java中Enum类型的序列化(转)
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/7102125.html
Copyright © 2011-2022 走看看