很高兴我重新创建了这个问题以给出我的实际例子:
我的问题是,当第一次构建时遗失httpd-fsdata-erw.h
时,规则httpd-fsdata-erw.h::
会为我创建它,并且一切正常。
如果我触摸httpd-fsdata-erw.h
进行识别,并且正在构建sourcefile1.o
,sourcefile2.o
,其他所有内容都会再次出现。精彩!
但是当我删除httpd-fsdata-erw.h
时。 Make正在检查先决条件并且什么也不做,因为它说“没什么可做的”虽然httpd-fsdata-erw.h
丢失了。
现在,当我触摸sourcefile2.h
时,make无法找到制定目标httpd-fsdata-erw.h
的规则。
MAYBE我混淆了一些错误消息
我可以使用.PONY:
- 目标进行修复,但正如您所知,它会重建大部分内容。
文件的概述:
extension
|
|-- Makefile
|--(httpd-fsdata-erw.h) (created by perl
|--(httpd-fsdata-erw.c) (created by perl)
|--(httpd-fsdata-erw.o)
|-- ext.o
|-- ext.bin
TOPDIR-- Makefile
|-- obj_dir
| |--sourcefile1.o
| |--sourcefile1.d
| |--sourcefile2.o
| |--sourcefile2.d
| |--...
|
|-- app
| |
| |--sourcefile1.c (needs httpd-fsdata-erw.h)
| |--sourcefile2.c
| |--sourcefile2.h (needs httpd-fsdata-erw.h)
| |--sourcefile3.c
| |--sourcefile4.c
| |
| |--appskt
| | |--webserver
| | | |-- Makefile
| | | |...
| | | |--fsdata
| | | |--index.html
| | | |--somejavascript.js
| | |
| | |
| | |--shell
| | | |...
| | |--crypto
| | | |...
| | |--ftp
| | | |...
| | |
|
|
|-- contiki
| |--Makefile.include
|
|
|
|-- plattform
| |-- cpu
| | |-- Makefile.r7s7210
| | |
| | |
目录= webserver中的Makefile使用perl脚本httpd-fsdata-erw.h .c和.o创建带有规则的扩展名文件夹
HTTPD_FSDATA_ERW_FILES=httpd-fsdata-erw.c httpd-fsdata-erw.h
$(HTTPD_FSDATA_ERW_FILES): $(PATH_WEBSERVER)/index.html $(PATH_WEBSERVER)/somejavascript.js
perl makefsdata -d $(HT....
web_content: $(HTTPD_FSDATA_ERW_FILES)
TOPDIR-- Makefile:
include $(CONTIKI)/Makefile.include
all: project.bin
project.bin: $(somestuff1) $(somestuff2) $(TARGET_PATH)/$(CONTIKI_PROJECT).$(TARGET)
@cmd .... nothing important, just a windows batch-file
| - contiki - Makefile.include:
-include $(PATH_...)/Makefile.r7s7210
-include ${addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \
$(PROJECT_SOURCEFILES:.c=.d)}
#.PHONY: httpd-fsdata-erw.h
httpd-fsdata-erw.h::
@$(MAKE) -j1 $(EXT_BIN) -C $(EXT_PATH) -f Makefile
$(TARGET_PATH)/%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a
some linking stuff
| - plattform - cpu - Makefile.r7s7210:
$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR):
...
$(CC) $(CFLAGS) $(IAR_INCLUDES) ... $< --dependencies=n $(@:.o=.d) -o $@)
答案 0 :(得分:0)
但是当我在第一次构建之后删除&#34; missing.h&#34; -file时,make无法找到目标。
这是因为.d文件的结构吗?
是的。
要解决此问题,请在生成.d
文件时使用-MP
gcc command line switch:
-MP
此选项指示CPP为每个依赖项添加虚假目标 除主文件外,导致每个文件都不依赖。这些 虚拟规则解决错误make如果你删除标题 文件没有更新Makefile匹配。这是典型的输出:test.o: test.c test.h test.h: