moc:未知选项--isystem

时间:2017-04-29 09:48:01

标签: makefile gnu-make moc scorep

我正在尝试安装score-p。它有标准的构建链。我成功通过了配置部分。配置后自动生成Makefile。然后我做了make并得到了一个错误。问题是moc抱怨-isystem是未知选项。该选项嵌入在QT_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 $@

2 个答案:

答案 0 :(得分:1)

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

但是,如果你删除它们,似乎很可能会因为找不到头文件而导致编译错误。

我建议您尝试将-isystem选项转换为普通的-I选项,moc会理解:

@$(MOC) $(patsubst -isystem,-I,$(QT_CPPFLAGS)) $(CUBE_INCLUDES) $(GUI_INCLUDES) $(CUBE_DEBUG_FLAGS) $(DEFINE_TRACE_BROWSER) $< -o $@

答案 1 :(得分:0)

你的依赖结构有点偏离:

你想要这样的东西:

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

%.moc.cpp: %.cpp
    moc $(INCLUDES) $(DEFINES) -i $< -o $@

请注意,moc.cpp文件和源cpp文件链指向同一个目标文件(因为moc.cpp实际上是主cpp文件的其他源代码,你让moc为你生成)。另请注意,您需要有一条规则来实际生成moc.cpp文件,您可以在其中传递moc正确的定义和包含。最后:你没有传递moc之类的东西,如-isystem或其他编译器特定的标志,只是定义&amp;包括。

请参阅文档,其中包含moc的完整部分,其中包含Makefile:http://doc.qt.io/qt-5/moc.html