二、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类似的写法
,实现多级目录,可扩展的方法。

Linux开发工具之Makefile(下)的更多相关文章

  1. Linux开发工具之Makefile(上)

    二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...

  2. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  3. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...

  4. Linux开发工具之gdb(下)

    三.gdb调试(下) 01.查看运行时数据 print - 查看变量值 ptype - 查看类型 print array - 查看数组 print *array@len - 查看动态内存 print ...

  5. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  6. Linux开发工具之gdb(上)

    三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试 ...

  7. Linux开发工具之gcc

    一.gcc入门(上)   1.gcc相关概念   gcc(GNU C Compiler)编译器,最初支持C语言,现已支持C.C++.Java.Pascal.Ada.COBOL语言等:支持多种硬件平台: ...

  8. Linux开发工具_yum使用

    yum 的说明与使用 1.什么是yum? 软件包管理器 提供了查找.安装.删除某一个.一组甚至全部软件的命令 命令简洁好用 2.yum语法 yum [ 选项 ] [命令] [安装包] 选项: -h h ...

  9. 【开发工具】- Windows下多个jdk版本切换

    一.直接安装jdk,如图我安装了JDK6.JDK7和JDK8三个版本: 二.在安装JDK8后需要在 C:\Windows\System32 该目录下删除 java.exe 和 javaw.exe两个文 ...

随机推荐

  1. Json数据时间格式的处理

    方法: using Newtonsoft.Json; using Newtonsoft.Json.Converters;//需引入Newtonsoft.Json.dll public class Co ...

  2. android中使用intent来实现Activity带数据跳转

    大家都知道startActivity()是用来切换跳转Activity的.如果想要在另个Activity中出书数据的话.只需要在源activity中使用intent.putExtra()方法传出数据. ...

  3. HAPROXY实习

    没事玩玩,简单搞定. 同一个URL可以分发到后端不同的WEB上. STATS页画也刷出来了. 参考网址: http://www.cnblogs.com/kgdxpr/p/3272861.html 如果 ...

  4. bcb 如何在DLL中捕捉系统级异常

    http://topic.csdn.net/t/20031023/09/2385627.html -------------------------------------------------- ...

  5. c# 函数相关练习

    1.输入一个正整数,求1!+2!+3!+...+n! 2.输入姓名,年龄,工作单位   我叫**,今年**岁了,现在在****工作   要求,在Main函数中接收这三个值   传到函数中打印 3.写一 ...

  6. 9.DataPager

    ListView搭配DataPager控件实现分页.有两种使用方式:一是将DataPager声明到ListView中:一种是DataPager\ListView没有嵌套关系,然后将DataPager的 ...

  7. jsoup技术抓取网页数据大全

    jsoupNews Bugs Discussion Download API Reference Cookbook jsoup ? Cookbook ? Extracting data ? 使用选择器 ...

  8. LA3353

    感觉好久没做网络流这类的题目都不快会做了 网络流建模之前首先要分析性质 选择要求每个点恰属一个环就代表每个点在选择的图中,只有唯一入度和唯一出度 那就简单了,对n个点拆点,对于原图的边i-->j ...

  9. 5451 HDU Best Solver

    链接: Best Solver 题目分析: 这个题目的关键点是需知道“共轭”. 如 :(A√B + C√D)  和 (A√B - C√D) 是共轭的 这个有一个规律 (A√B + C√D)^n + ( ...

  10. 【转】推荐--《Android深入浅出》----不错

    原文网址:http://www.cnblogs.com/plokmju/p/Android_Book.html 承香墨影   推荐--<Android深入浅出> 基本信息 书名:Andro ...