我正在尝试安装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 $@
答案 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