zoukankan      html  css  js  c++  java
  • Linux开发工具之Makefile(下)

    二、Makefile(下)
    01.make常用内嵌函数
    函数调用
      $(function arguments)
    $(wildcard PATTERN)
      当前目录下匹配模式的文件
      例如:src=$(wildcard *.c)
    $(patsubst PATTERN,REPLACEMENT,TEXT)
      模式替换函数
      例如:$(patsubst %.c,%.o,$src)
      等价于$(src:.c=.o)
    shell函数
      执行色狼来了命令
      例如:$(shell ls -d */)
    #ls
    Makefile
    02.多级目录Makefile
    #touch main.c
    #mkdir bll(应用逻辑层)
    #mkdir ui(界面层)
    #mkdir dal(数据逻辑层)
    #cd ui
    #touch ui.h ui.c
    #cd ..
    #cd dll
    #touch dal.h dal.c
    #cd ..
    #cd bll
    #touch bll.h bll.c
    #ls
    bll dll Makefile ui
    #vi Makefile (有二级目录)
    CC = gcc
    CFLAGS =-Wall -g
    BIN = main
    SUBDIR = $(shell ls -d */)(当前目录下的所有文件夹)
    ROOTSRC = $(wildcard *.c)(当前目录下的所有*.c文件)
    ROOTOBJ = $(ROOTSRC:%.c=%.o)
    SUBSRC = $(shell find $(SUBDIR) -name '*.c')
    SUBOBJ = $(SUBSRC:%.c=%.o)
    $(BIN):$(ROOTOBJ) $(SUBOBJ)
    $(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ)
    .c.o:
    $(CC) $(CFLAGS) -o $< -o $@
    clean:
    rm -f $(BIN) $(ROOTOBJ) $(SUBOBJ)
    #ls -d */(列出该目录下的文件夹都列出来)
    #find bll dll ui -name '*.c'
    bll/bll.c
    dll/dll.c
    ui/ui.c
    #make
    #makeclean
    #ls
    03.Makefile可能生成多个可执行文件,如何只生成一个可执行文件
    #vi Makefile
    SUBDIRS = test1 test2
    .PHONYL:default all clean $(SUBDIRS)
    default:all
    all clean:
    $(MAKE) $(SUBDIRS) TARGET=$@
    $(SUBDIRS):
    $(MAKE) -C $@ $(TARGET)
    #cd . ./test1
    #vi Makefile
    CC = gcc
    BIN = test1
    OBJS = test1.o
    .PHONY: all clean print
    all:print $(BIN)
    print @echo "----make all in $(PWD)----"
    $(BIN):$(OBJS)
    $(CC) $(OBJS) -o $@
    %.o:%.c
    $(CC) $(OBJS) -o $@
    %.o:%.c
    $(CC) -c $<
    clean:
    @echo "---- make clean in $(PWD) ----"
    rm -f $(BIN) $(OBJS)
    #cd ../test2
    #ls
    #vi Makefile
    CXX = g++(实现C++的编译)
    BIN = test2
    OBJS = test2.o
    CPPFLAGS=-Wall -g
    .PHONY: all clean print
    all:print $(BIN)
    @echo "---- make all in $(PWD) ----"
    $(BIN):$(OBJS)
    $(CXX) $(OBJS) -o $@
    .o:%.cpp
    $(CXX) -c $<
    clean:
    @echo "---- make clean in $(PWD) ----"
    rm -f $(BIN) $(OBJS)
    如果子目录下存在文件夹,也可以采用与顶层目录的Makefile类似的写法
    ,实现多级目录,可扩展的方法。
  • 相关阅读:
    LDA模型了解及相关知识
    GAN
    tensorflow学习6
    GAN的文献综述
    python相关工具
    tensorflow学习5----变量管理
    tensorflow学习5----GAN模型初探
    8月14日至8月20日技术积累
    8月7日至8月13日技术积累
    8月1日到8月6日技术要点
  • 原文地址:https://www.cnblogs.com/baiyifan/p/5279229.html
Copyright © 2011-2022 走看看