• Linux Makefile多目录的编写


    手头一个项目,需要编写项目的makefile

    多目录结构:

    csource/  

    ├── common
    │   └── sqlite3
    ├── inc
    │   ├── curl
    │   ├── lua
    │   └── Protection
    ├── lib
    │   ├── arm
    │   └── linux
    ├── obj
    ├── out
    │   ├── arm
    │   └── linux
    ├── src

    源码目录src,输出目录out,include目录inc,输入链接库目录lib,常用静态函数和sqlite3目录common

    makefile如下:

     1 PLAT= none
     2 CC=
     3 CXX=
     4 CFLAGS=
     5 LDFLAGS=
     6 MKDIR_P=mkdir -p
     7 
     8 PLATS= linux arm
     9 
    10 root= libroot.so
    11 root_a= libroot.a
    12 
    13 INC_DIR= ./inc
    14 COM_DIR= ./common
    15 SQL_DIR= ./common/sqlite3
    16 LUA_DIR= ./inc/lua
    17 PRO_DIR= ./inc/Protection
    18 INCLUDE= -I$(LUA_DIR) -I$(INC_DIR) -I$(COM_DIR) -I$(SQL_DIR) -I$(PRO_DIR)
    19 DIR_SRC= ./src
    20 
    21 SRC = $(wildcard ${DIR_SRC}/*.cpp)
    22 OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) $(DIR_OBJ)/sqlite3.o
    23 
    24 SO_TARGET = ${DIR_BIN}/${root}
    25 LIB_TARGET= ${DIR_BIN}/${root_a}
    26 
    27 
    28 # Targets start here.
    29 default: $(PLAT)
    30 
    31 none:
    32     @echo "Please do 'make PLATFORM' where PLATFORM is one of these:"
    33     @echo "  $(PLATS)"
    34 
    35 ${SO_TARGET}:${OBJ}
    36     $(CXX) $(OBJ) -o $@ $(LDFLAGS)
    37     cp ${DIR_BIN}/${root} ./test/ -f
    38 
    39 ${LIB_TARGET}:${OBJ} 
    40     $(AR) $@ ${OBJ} 
    41     $(RANLIB) $@
    42 
    43 dir:
    44     $(MKDIR_P) $(DIR_OBJ) $(DIR_BIN);
    45 
    46 all:$(SO_TARGET) $(LIB_TARGET)
    47 
    48 ALL = dir all
    49 
    50 linux:
    51     $(MAKE) $(ALL) DIR_OBJ="./obj_linux/" DIR_BIN="./out/linux" 
    52     CC="gcc" CXX="g++" AR="ar rcu" RANLIB="ranlib" 
    53     CFLAGS="-Wno-write-strings -m32 -O2 -D_DEBUG -D_LINUX -fPIC" 
    54     LDFLAGS="-O2 -shared -m32 -ldl -pthread -lrt -L./lib/linux -llua -lProtection -lz -lcurl"
    55 
    56 arm:
    57     $(MAKE) $(ALL) DIR_OBJ="./obj_arm/" DIR_BIN="./out/arm" 
    58     CC="arm-linux-gnueabihf-gcc" CXX="arm-linux-gnueabihf-g++" 
    59     AR="arm-linux-gnueabihf-ar rcu" RANLIB="arm-linux-gnueabihf-ranlib" 
    60     CFLAGS="-Wno-write-strings -O2 -D_ARM -D__LINUX -fPIC" 
    61     LDFLAGS="-O2 -shared -ldl -pthread -lrt -L./lib/arm -llua -lProtection -lz -lcurl"
    62 
    63 
    64 # list targets that do not create files (but not all makes understand .PHONY)
    65 .PHONY: all $(PLATS) default clean none
    66 
    67 ${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp 
    68     $(CXX) $(CFLAGS) $(INCLUDE) -c $< -o $@
    69 
    70 ${DIR_OBJ}/sqlite3.o:${DIR_SRC}/sqlite3.c 
    71     $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
    72 
    73 .PHONY:clean
    74 clean: 
    75     -find ${DIR_OBJ} -name *.o -exec rm -rf {} ;
  • 相关阅读:
    现代 CSS 解决方案:CSS 数学函数
    浅谈逻辑选择器 父选择器它来了!
    Astyle 常用参数整理
    MySQL两阶段提交串讲
    GIL全局解释器锁
    了解进程、线程、协程概念
    go module介绍
    Flutter热重启、热加载、调试与发布应用
    flutter项目配置国内镜像
    excel进度条怎么设置
  • 原文地址:https://www.cnblogs.com/jojodru/p/3949663.html
Copyright © 2020-2023  润新知