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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?