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这个。

总结一下就是

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

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

最新文章

  1. Hybrid App经验解读 一
  2. ubuntu rhythmbox乱码解决方法
  3. 关于codereview工具与建议
  4. UINavigationController详解二(转)页面切换和SegmentedController
  5. 编译cscope-15.8a遇到的问题与解决方案
  6. javascript 事件相关
  7. HTML 多媒体
  8. hdu5355 Cake(构造)
  9. 两个堆叠fragment,上层fragment响应于降低fragment的button点击事件补救措施
  10. UWP锁、解屏后无法响应操作
  11. Linux命令的学习
  12. dubbo初步认识
  13. Python:线程之定位与销毁
  14. 前端 HTML 标签分类
  15. Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态
  16. css 常用单位
  17. csp刷题
  18. ls 列出文件目录(可以含子目录)及文件的完整路径
  19. sql server数据库查询超时报错
  20. bzoj 1588 裸平衡树

热门文章

  1. scss使用指南--每天一点
  2. ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度学习环境【学习笔记】【原创】
  3. UVa 10655 n次方之和(矩阵快速幂)
  4. POJ 1047 Round and Round We Go
  5. HTML和CSS美化 登入框的页面
  6. Ubuntu14.04,16.04(桌面版)找回root 密码
  7. angular的 表单
  8. UVA-12166 Equilibrium Mobile(二叉树)
  9. IOS-网络(数据安全:MD5加密)
  10. 在JavaScript中进行文件处理,第四部分:对象URLs