cc=g++

all:signal

%:%.o
$(cc) -o $< $@

%.cpp:%.o
echo se $< $@ $* $^
g++ -c $< $@
cl:
rm -rf *.o signal
[root@localhost signal]#

下面来一个完整版的

有一个cpp源文件 跟makefile在同一目录  有一个头文件在子目录 subPath

源文件为一个简单的输出 hello

makefile如下

cc=g++
obj=signal.o
VPATH=./subPath
all:signal
%:%.o
echo fi
$(cc) $< -o $@
$(obj):%.o:%.cpp
echo se $< $@ $* $^
$(cc) -c -I./subPath $<
cl:
rm -rf *.o signal
[root@localhost signal]#

主要说明如下:很多时候其实是对的 不仔细目标中:左边是目标 右边依赖 不要搞错了 搞错了有时却可以是因为 系统默认会推出编译命令而不是你给出的命令

这一点在执行make后输出可看,可用用echo输出看一下调到自己的命令没

还可以去掉指定

~
[root@localhost signal]# cat makefile
cc=g++
VPATH=./subPath
all:signal
%:%.o
echo fi
$(cc) $< -o $@
%.o:%.cpp
echo se $< $@ $* $^
$(cc) -c -I./subPath $<
cl:
rm -rf *.o signal
[root@localhost signal]#

表示的是会根据 all中目标找 同名的 cpp编成 o 再链接成 bin ,如果有头文件的话会到 VPATH中去搜,但是要注意指写 -I参数

这个参数可用shell脚本拼相对目录,但是makefile是不能为你做什么。必须手动指定。如果有库的话还要指定 -L 参数 lib的文件路径

[root@localhost bin]# cat makefile
#basePath=/home/ctest/signal
basePath=..
VPATH=$(basePath)/heard:$(basePath)/src:$(basePath)/o
cc=gcc
obj =signal
all:$(obj)

$(obj):%:%.o
echo make the bin
$(cc) $(basePath)/o/$< -o $(basePath)/bin/$@
%.o:%.cpp
echo make the .o file
$(cc) -c -I$(basePath)/heard $< -o $@
mv $@ $(basePath)/o
cl:
rm -rf $(basePath)/o/*.o $(basePath)/bin/signal $(basePath)/*.o $(basePath)/signal $(basePath)/bin/*.o
[root@localhost bin]#

注意目录名不要写错了,还有就是变量中二进制目标那层是不能直接写成%:%.o 的而要写成$(obj):%:%.o

还要特别注意的是前面带了具体的值时$<之类的自动变量取出来的是 $(obj)里面的目标字符串,并不带目录的,而通配符在前面的目标命令中

的自动变量是自动会加上找到的文件的目录路径的。如%.o:%.cpp这个。

总结一下就是

因为上层目标给出的就只有一个字符串,(不然人家也不知道你要生成啥,总有个头)

你给出目标后才会去找生成这个目标的依赖,而找到的值才会有全路径的。

make 写法练习的更多相关文章

  1. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

  2. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  3. .NET跨平台之旅:数据库连接字符串写法引发的问题

    最近在一个ASP.NET Core站点中遇到一个奇怪问题.当用dotnet run命令启动站点后,开始的一段时间请求执行速度超慢,有时要超过20秒,有时甚至超过1分钟,日志中会记录这样的错误: Sys ...

  4. 【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分部视图,异步

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{ ...

  5. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  6. touchstart,touchmove,touchend事件 写法

    jQuery写法: $('#id').on('touchstart',function(e) { var _touch = e.originalEvent.targetTouches[0]; var ...

  7. 前端导出Excel兼容写法

    今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...

  8. Express 4 handlebars 不使用layout写法

    Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...

  9. javascript函数的几种写法集合

    1.常规写法 function fnName(){ console.log("常规写法"); } 2.匿名函数,函数保存到变量里 var myfn = function(){ co ...

  10. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

随机推荐

  1. Maximum Depth of Binary Tree,求树的最大深度

    算法分析:求树的最小最大深度时候,都有两种方法,第一种是递归思想.树最大最小深度,即为它的子树的最大最小深度+1,是动态规划的思想.还有一种方法是层序遍历树,只不过求最小深度时,找到第一个叶子节点就可 ...

  2. 雷林鹏分享:Ruby 发送邮件 - SMATP

    Ruby 发送邮件 - SMATP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. ...

  3. ActiveStorage. 英文书Learnrails5.2的案例,看如何放到云上。

    ActiveStorage. 英文书Learnrails5.2的案例 本例子目标:增加一个avatar image给每个用户. 准备: 需要安装Imagemagick software.它可以crea ...

  4. STL空间配置器那点事

    STL简介 STL(Standard Template Library,标准模板库),从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其 ...

  5. FindBugs插件的安装与使用

    转载:http://www.cnblogs.com/kayfans/archive/2012/06/18/2554022.html 1 什么是FindBugs FindBugs 是一个静态分析工具,它 ...

  6. 在laravel视图中直接使用{{ csrf_token() }}被翻译成英文显示的处理方法

    在表单中加一个input框在放入{{ csrf_token() }}就可以了: 方法如下: <input type="hidden" name="_token&qu ...

  7. nfs的无敌时间更改的配置参数

    nfs服务端重启之后,共享文件夹进入grace time(无敌时间) 客户端在服务端重启后写入数据大概要等90秒 nfs配置文件:/etc/sysconfig/nfs [root@backup ~]# ...

  8. 身份证&银行卡识别方案

    一.  调用第三方服务 腾讯云OCR识别: 实现方法:Post图片 URL到腾讯云服务器.Post图片文件 到腾讯云服务器 b.    报价: 月接口调用总量 0<调用量≤1000 1000&l ...

  9. 201621123006 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  10. Google Flutter框架:使用VS Code进行开发

    虽然进行安卓开发使用Android studio 比较方便 ,但是因为AS太臃肿而且还有一些404问题,就在打算如何进行高效的Android开发,于是找到了Flutter SDK, 他支持使用IDE进 ...