m08090420 2014-10-07 09:00
浏览 1429

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相同的目录中不会出现问题。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
    • ¥15 python天天向上类似问题,但没有清零
    • ¥30 3天&7天&&15天&销量如何统计同一行
    • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
    • ¥15 C#调用python代码(python带有库)
    • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
    • ¥15 vs2019中数据导出问题
    • ¥20 云服务Linux系统TCP-MSS值修改?