makefile模式规则问题-makefile模式匹配提示无法找到规则

问题描述

makefile模式匹配提示无法找到规则

1.dep_dir := .deps
2.obj_dir := .objs
3.srcs := $(shell find ./ -name "*.c" -o -name "*.cpp")
4.srcs := $(subst ./,,$(srcs))
5.objs := $(patsubst %.cpp,%.o, $(srcs))
6.objs := $(patsubst %.c,%.o, $(objs))
7.dep_dirs := $(addprefix $(dep_dir)/,$(sort $(dir $(objs))))
8.objs := $(addprefix $(obj_dir)/, $(objs))
9.dirs += $(sort $(dir $(objs)))
10..PHONY:all
11.all:$(target)
12.$(target):$(objs)
13. g++ -g -fPIC -o $(target) $(objs) $(library_path)
14.$(obj_dir)/%.o : %.cpp | $(dirs) $(dep_dirs)
15. g++ -c $(macro) $(cflags) $(include_path) -MMD -MP -MF"$(dep_dir)/$(<:.cpp=.d)" -MT"$(dep_dir)/$(<:.cpp=.d)" -o $@ $<
16.$(obj_dir)/%.o : %.c | $(dirs) $(dep_dirs)
17. g++ -c $(macro) $(cflags) $(include_path) -MMD -MP -MF"$(dep_dir)/$(<:.c=.d)" -MT"$(dep_dir)/$(<:.c=.d)" -o $@ $<
请问下这段makefile程序在第一次运行的时候生成第二个.o目标文件会提示找不到规则。不做任何改动再次运行make的时候就能够正常编译。第一次运行结果如下:g++ -c -DDEBUG -ggdb3 -fPIC -Wall -Wshadow -O0 -I. -I../include -MMD -MP -MF".deps/test_main.d" -MT".deps/test_main.d" -o .objs/test_main.o test_main.cpp
make: *** No rule to make target .objs/test.o', needed by../../bin/Debug/server_debug'. Stop.
再次运行如下:
g++ -c -DDEBUG -ggdb3 -fPIC -Wall -Wshadow -O0 -I. -I../include -MMD -MP -MF".deps/test.d" -MT".deps/test.d" -o .objs/test.o test.c
也就是说第一次运行提示.objs/test.o找不到规则,第二次运行又成功的生成了。
还有一个现象就是没有第8行代码并且将模式规则改为%.o:%.c和%.o:%.cpp的时候运行一次就能成功。也就是说将.o文件输出到.c和.cpp相同的目录中不会出现问题。

时间: 2024-08-31 10:29:49

makefile模式规则问题-makefile模式匹配提示无法找到规则的相关文章

Makefile札记之:Makefile工作原理及隐含规则应用

从只有一个Makefile的单级Makefile开始. 对于一个稍大的项目或者说软件来说,源程序(.c文件或者是.h文件),以及源程序文件夹,绝对不只是一个文件或者源程序文件夹,想想你写的代码只有一个源程序或者程序文件夹还是什么时候.一个好的程序员,总是希望自己写的代码文件,清晰,一目了然,通过不同的文件夹,不用的名字就能大致看出该程序的功能. 当只有一个源程序文件的时候,比如main.h,main.c,这个时候,由于源程序文件少,我们可以手动对程序进行编译:gcc  main.c   -o 

电脑怎么把硬盘模式改成ahci模式匹配win8系统

  电脑怎么把硬盘模式改成ahci模式匹配win8系统 1.重启电脑或者开启电脑,然后在出现开机画面的时候按下对应的快捷键进入到bios设置窗口,在bios设置窗口中利用键盘上的方向键选择"Config"选项,然后选择"Serial ATA(SATA)",按下回车键确认; 2.打开Serial ATA(SATA)后,会看到"SATA comtroller mode option [compatibility]",按下回车键选择它; 3.此时会弹出

makefile 运行错误:makefile : 8 *** 遗漏分隔符。停止。这个是ext2undelete-0.0.4的makefile。如何解决

问题描述 makefile 运行错误:makefile : 8 *** 遗漏分隔符.停止.这个是ext2undelete-0.0.4的makefile.如何解决 srcdir = . top_srcdir = . top_builddir = . my_dir = . INSTALL = /usr/bin/install -c @MCONFIG@// -----------------这是第8行 % : %.sh @RESIZER_CMT@RESIZE_DIR= resize @DEBUGFS_

exchange 模式收邮件下,outlook 2003邮件规则数量

问题描述 使用exchange模式收邮件,outlook2003里面的邮件规则是不是有数量的限制?如果有是不是在服务器上修改.谢谢错误提示信息如下:oneormorerulescannotbeuploadedtomicrosoftexchangeandhavebeendeactivated.thiscouldbebecausesomeoftheparametersarenotsupported,orthereisinsuffcientspacetostoreallofyourfules 解决方案

visual studio-运行VS2013编译的程序,在其他电脑提示没有找到msvcp120d.dll

问题描述 运行VS2013编译的程序,在其他电脑提示没有找到msvcp120d.dll 如题:VS2013编译的程序,在其他电脑运行提示没有找到msvcp120d.dll 把对应文件加入对应目录,依然提示没有找到msvcp120d.dll 解决方案 楼主是把自己电脑上编译出来的.exe放到别的电脑上跑了? 解决方案二: 应该把msvcp120d.dl这个文件复制到你的应用程序所在目录的bin目录下, 然后,用assembly属性提定该文件. 解决方案三: 需要带上VC的运行时库的环境. 解决方案

windows-安装Windows 2008 R2 提示未找到任何设备驱动

问题描述 安装Windows 2008 R2 提示未找到任何设备驱动 最近刚组装了一台新机器,华硕B85的主板,用UtralISO制作了USB的安装盘(USB 是闪迪 3.0) 从U盘启动电脑 进入到安装界面,点击"现在就安装"--提示未找到任何设备的驱动 百度的一些方法我试过,不管用,请大神相助. 小弟新来,还没C币,希望大神别嫌弃.好人新年走鸿运,一生平安. 解决方案 没有认到硬盘驱动,在你的bios中将sata设置为兼容模式. 解决方案二: 具体的设置方式你可以看下随机的说明书中

电脑ie浏览网页提示“无法找到该网页”解决办法

问题一,无法找到该网页 1.查看下你家网线的接口是否松动?这种结果有可能是数据包丢失引起的. 2.看下浏览器设置上有什么问题没?不行先恢复默认设置,完了再改回来自定义设置. 3.兴许你家从前中过毒或是流氓软件,杀毒不彻底,残留有病毒,建议你杀下毒,因为有些病毒会发送大量无用数据包,造成网路堵塞. 4.你家的网络环境,也就是你家接网是什么类型的,从前一直这样的话,建议换成一家独享的ADSL模式,不要接局域网了. 问题二, 1.清除一下IE浏览器的缓存,点IE上的工具--然后再选择最下面的Inter

IIS提示未找到提供程序

  Win7系统 IIS 调试ASP(aspcmsgbk25) 错误号:3706 提示 "未找到提供程序 该程序可能未正确安装"解决办法 . 有两种报错形式 一.错误号:3706 错误描述:未找到提供程序.该程序可能未正确安装. 二."ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. " 错误的原因在于在64位系统中,IIS7应用程序池默认没有启用32位程序,也就是说如果使用的是64位操作系统,而没有64位的Jet

Win8.1系统打开文件夹提示“无法找到脚本文件”怎么办?

Win8.1系统打开文件夹提示"无法找到脚本文件"怎么办?   原因分析: 用户在打开任何一个文件夹的时候,窗口容器界面都是由资源管理器负责,找不到脚本文件很大的可能就是资源管理器打开的过程中被安插了恶意脚本,而脚本又正好被杀毒软件清除了,所以才出现了打开文件夹等出现无法找到脚本文件的情况. 解决方法: 1.首先利用快捷键:"Alt + Ctrl + Del"或"Ctrl + Shitf + Esc" 打开任务管理器; 2.然后点 "文