我正在尝试安装得分-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 $@发布于 2017-04-29 19:35:50
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 $@发布于 2017-04-29 10:06:56
您的依赖关系结构有点偏离:
你想要这样的东西:
%.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或其他编译器特定的标志),只传递定义&包含。
请参阅文档,其中包含完整的关于Makefiles和Makefiles的完整部分:http://doc.qt.io/qt-5/moc.html。
https://stackoverflow.com/questions/43694133
复制相似问题