moc: 未知选项 -isystem
moc: Unknown option -isystem
我正在尝试安装 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 $@
你的依赖结构有点不对:
你想要这样的东西:
%.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
或其他编译器特定的标志,只是定义和包含。
请参阅文档,其中包含关于 moc
和 Makefile 的完整部分:http://doc.qt.io/qt-5/moc.html
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 $@
我正在尝试安装 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 $@
你的依赖结构有点不对:
你想要这样的东西:
%.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
或其他编译器特定的标志,只是定义和包含。
请参阅文档,其中包含关于 moc
和 Makefile 的完整部分:http://doc.qt.io/qt-5/moc.html
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 $@