Makefile moc:未知选项-isystem

Makefile moc:未知选项-isystem,makefile,gnu-make,moc,scorep,Makefile,Gnu Make,Moc,Scorep,我正在尝试安装。它有标准的构建链。我成功地通过了配置部分。Makefile是在配置后自动生成的。然后我做了一个make,得到了一个错误。问题是moc抱怨-isystem是一个未知选项。该选项嵌入在QT\u CPPFLAGS中。如果删除此选项,则moc会抱怨指定的输入文件太多。我该怎么办 $(editor_plugin_moc_o): ../src/GUI-qt/plugins/SourceCodeEditor/%.moc.cpp: $(SRC_ROOT)src/GUI-qt/plugins/So

我正在尝试安装。它有标准的构建链。我成功地通过了配置部分。Makefile是在配置后自动生成的。然后我做了一个
make
,得到了一个错误。问题是
moc
抱怨
-isystem
是一个未知选项。该选项嵌入在
QT\u CPPFLAGS
中。如果删除此选项,则
moc
会抱怨指定的输入文件太多。我该怎么办

$(editor_plugin_moc_o): ../src/GUI-qt/plugins/SourceCodeEditor/%.moc.cpp: $(SRC_ROOT)src/GUI-qt/plugins/SourceCodeEditor/%.h
    @echo "Create moc file $@"
    @$(MKDIR_P) ../src/GUI-qt/plugins/SourceCodeEditor
    @$(MOC) $(QT_CPPFLAGS) $(CUBE_INCLUDES) $(GUI_INCLUDES) $(CUBE_DEBUG_FLAGS) $(DEFINE_TRACE_BROWSER) $< -o $@
$(编辑器\u插件\u moc\o):../src/GUI qt/plugins/sourcecodeditor/%.moc.cpp:$(src\u ROOT)src/GUI qt/plugins/sourcecodeditor/%.h
@echo“创建moc文件$@”
@$(MKDIR_P)../src/GUI qt/plugins/sourcecodeditor
@$(MOC)$(QT\U CPPFLAGS)$(多维数据集包含)$(GUI包含)$(多维数据集调试标记)$(定义跟踪浏览器)$<-o$@

您的依赖关系结构有点偏离:

你想要的是:

%.o : %.moc.cpp %.cpp
    @echo "Normal compilation of object file goes here"

%.moc.cpp: %.cpp
    moc $(INCLUDES) $(DEFINES) -i $< -o $@
%.o:%.moc.cpp%.cpp
@echo“目标文件的正常编译在此进行”
%.moc.cpp:%.cpp
moc$(包括)$(定义)-i$<-o$@
请注意,
moc.cpp
文件和源
cpp
文件链接到同一个目标文件(因为
moc.cpp
实际上是主
cpp
文件的附加源代码,由
moc
为您生成)。还要注意,您需要有一个规则来实际生成该
moc.cpp
文件,在该文件中传递
moc
正确的定义和包含。最后:您不会传递诸如
-isystem
之类的
moc
或其他编译器特定的标志,只传递定义和包含


请参阅文档,其中有一个完整的关于
moc
的部分,makefile位于:

GCC
-isystem
选项带有一个参数,因此它类似于
-isystem/some/dir/include
。您不能只删除
-isystem
选项而不删除其参数

但是,如果同时删除这两个文件,可能会出现编译错误,因为找不到头文件

我建议您尝试将
-isystem
选项转换为正常的
-I
选项,主运行中心将了解:

@$(MOC) $(patsubst -isystem,-I,$(QT_CPPFLAGS)) $(CUBE_INCLUDES) $(GUI_INCLUDES) $(CUBE_DEBUG_FLAGS) $(DEFINE_TRACE_BROWSER) $< -o $@
@$(MOC)$(patsubst-isystem,-I,$(QT\u CPPFLAGS))$(CUBE\u包括)$(GUI\u包括)$(CUBE\u调试\u标志)$(DEFINE\u TRACE\u BROWSER)$<-o$@