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. HYSBZ 1036 树的统计Count(树链剖分)题解

    思路: 树链剖分,不知道说什么...我连模板都不会用 代码: #include<map> #include<ctime> #include<cmath> #incl ...

  2. enum SQLiteDateFormats

    DateTimeFormatInfo.CurrentInfo https://msdn.microsoft.com/en-us/library/system.globalization.datetim ...

  3. [AHOI2008]上学路线

    题意:给定一个无向图,删除某些边有一定的代价,要求删掉使得最短路径减小,求最小代价. 首先要spfa求出起点到各个点的最短距离.对于一条权值为w,起点为i,终点为j的边,设dis[k]为起点到k点的距 ...

  4. 可替换参数在SharePoint和VS中的使用

    什么是可替换参数呢?你可能会在代码里看到像$SharePoint.Project.AssemblyFullName$一样的标记.VS会在编译的时候用完整的签名来替换相应参数.例如,标记 $ShareP ...

  5. Python学习札记(二十八) 模块1

    参考:模块 NOTE 1.模块:一个.py文件称为一个模块. 2.代码模块化的意义:a.提升程序的可维护性 b.不用重复造轮子 3.避免模块冲突,解决方法:引入了按目录来组织模块的方法,称为包(Pac ...

  6. 使用webuploader实现文件的断点续传

    webuploader是百度Fex团队开发的一款上传插件,对于现代浏览器采用了HTML5的方式进行上传,二为了兼容IE浏览器则采用了Flash的方式作为补充. 首先,这个插件在全局仅暴露一个WebUp ...

  7. Splay树学习

    首先给出一论文讲的很好: http://www.docin.com/p-63165342.html http://www.docin.com/p-62465596.html 然后给出模板胡浩大神的模板 ...

  8. python 堆栈

    class Node: #堆栈链结节点的声明 def __init__(self): self.data= #堆栈数据的声明 self.next=None #堆栈中用来指向下一个节点 top=None ...

  9. iframe与父页面传值

    最近做的项目中用到了不少iframe,而且需要实现: 从父页面获取iframe中某个元素的值或则从iframe页面获取其父页面上某个元素的值. 在网上查询了相关东西,后总结如下: (1)父页面获取if ...

  10. [osgearth]通过API创建一个earth模型

    通过API的方式大体需要以下几个步骤: 创建map对象—— 创建影像数据层—— 创建高程数据层—— 将影像数据层以及高程数据层加入到map对象—— 根据前面创建的map对象创建mapNode节点—— ...