二、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. 【转】javascript变量作用域、匿名函数及闭包

    下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...

  2. GPUImage 自定义滤镜

    GPUImage 自定义滤镜 GPUImage 是一个基于 GPU 图像和视频处理的开源 iOS 框架.由于使用 GPU 来处理图像和视频,所以速度非常快,它的作者 BradLarson 称在 iPh ...

  3. 架设wordpress再vps上的 一些感想总结

    日本vps.樱花系列 配置: 2cpu+1G内存+100G硬盘 系统 第一次我把默认的centos 给换了..原因就是,不会linux.而且我主要用.net  感觉 mono也行.但是linux不会. ...

  4. JS论坛地址备忘

    论坛: 百度JS吧 CSDN论坛JS版 AS天地会JS区 编程论坛JS版 开源中国JS分享 开源中国JS提问区 德问 JS堂 CSS-JS前端论坛 蓝色理想 ITEYE php100 phpspeak ...

  5. 我的VSTO之路(四):深入介绍Word开发

    原文:我的VSTO之路(四):深入介绍Word开发 在上一篇文章中,我介绍了Word的对象模型和一些基本开发技巧.为了更好的介绍Word插件开发,我为本文制作了一个Word书签的增强版,具体功能是让用 ...

  6. 14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读

    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读 一致性读意味着 InnoDB 使用多版本来实现一个查询数据库的快照在某个时间点. 查看看到的事务做出的改变被提 ...

  7. 将汉字转化为拼音,正则表达式和得到汉字的Unicode编码

    一:上图,不清楚的看代码注解,很详细了 二:具体代码 窗体代码 using System; using System.Collections.Generic; using System.Compone ...

  8. 【转】Ansys 13.0 flexlm not running完美解决方案

    http://jingyan.baidu.com/article/af9f5a2dd9843a43150a4550.html 实测,12.1 用此方法问题同样得解.

  9. zoj 3659

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3659 #include<cstdio> #inclu ...

  10. tcpCopy

    tcpcopy是一种应用请求复制(基于tcp的packets)工具,其应用领域较广,我们曾经应用于网易的广告投放系统,urs系统,nginx hmux协议开发等系统,避免了上线带来的很多问题. 总体说 ...