C++ 使目标和依赖项名称格式化

C++ 使目标和依赖项名称格式化,c++,makefile,gnu-make,C++,Makefile,Gnu Make,你可以看到第一个问题,它被解决了,thx艾尔达·阿布萨利莫夫。现在我需要为uic.exe调用设置正确的目标和依赖项。 代码的开头是: ui_files := $(wildcard $(SUBDIRS:%=%/*.ui)) ui_headers := $(foreach ui_files,$(ui_files),$(dir $(ui_files))ui_$(notdir $(ui_files:.ui=.h))) ui_cpp := $(patsubst %.h, %.cpp, $(ui_heade

你可以看到第一个问题,它被解决了,thx艾尔达·阿布萨利莫夫。现在我需要为uic.exe调用设置正确的目标和依赖项。 代码的开头是:

ui_files := $(wildcard $(SUBDIRS:%=%/*.ui))
ui_headers := $(foreach ui_files,$(ui_files),$(dir $(ui_files))ui_$(notdir $(ui_files:.ui=.h)))
ui_cpp := $(patsubst %.h, %.cpp, $(ui_headers))
首先,我需要做的是生成标题,这是我试图通过以下代码来做的:

<directory/ui_<ui_file_name>.h>: <ui_file_path>
    $(QT_BIN)/uic -o $@ $< 
:
$(QT_-BIN)/uic-o$@$<
其次,我生成CPP:

<directory/ui_<ui_file_name>.cpp>: <ui_file_path> <header_file_path>
$(QT_BIN)/uic -i <header_file_path> -o <target> <ui_file_path>
:
$(QT_-BIN)/uic-i-o
请帮助我,用make-syntax来填充这个非make-syntax,或者给我一个合适的方法


谢谢。

我想应该是这样的(但是,我不确定Make将如何处理文件的目录部分):

$(ui\u标题):ui\u%.h:%.ui
$(QT_-BIN)/uic-o$@$<
$(ui\u cpp):%.cpp:%.ui\u%.h
$(QT_-BIN)/uic-i$(单词2,$^)-o$@$<
这两条规则都是规则

UPD。 静态模式规则在这里不好,因为模式应用于整个文件名(带有路径)。相反,应使用常规的:

ui\%.h:%.ui
$(QT_-BIN)/uic-o$@$<
%.cpp:%.ui\%.h
$(QT_-BIN)/uic-i$(单词2,$^)-o$@$<
第章解释了它是如何工作的:

当目标模式不包含斜杠(通常不包含斜杠)时,文件名中的目录名将从文件名中删除,然后再与目标前缀和后缀进行比较。将文件名与目标模式进行比较后,目录名以及结束它们的斜杠将添加到根据模式规则的先决条件模式和文件名生成的先决条件文件名中。忽略目录只是为了查找要使用的隐式规则,而不是在该规则的应用程序中

Make将在目录之前粘贴“ui_u3;”前缀,而不是在文件名之前。所以这是错误的。
$(ui_headers) : ui_%.h : %.ui
    $(QT_BIN)/uic -o $@ $< 

$(ui_cpp) : %.cpp : %.ui ui_%.h
    $(QT_BIN)/uic -i $(word 2,$^) -o $@ $<
ui_%.h : %.ui
    $(QT_BIN)/uic -o $@ $< 

%.cpp : %.ui ui_%.h
    $(QT_BIN)/uic -i $(word 2,$^) -o $@ $<