openfilpper 软件编译问题记录
openfilpper 软件编译问题记录
openfilipper在windows下面从源码安装的介绍的官方内容见:https://www.graphics.rwth-aachen.de/media/openflipper_static/Daily-Builds/Doc/Free/Developer/buildingOpenFlipper.html
但是在具体执行过程中,qt相关的moc,和uic文件并没有自动生成,因此,此处记录如何利用python执行moc,uic,生成相关的文件,具体代码如下:
import os
uiprefix = "ui_";
mocprefix = "moc_";
ui_original_suffix = ".ui"
ui_result_suffix = ".h"
moc_original_suffix = ".hh"
moc_result_suffix = ".cc"
moc_content = "Q_OBJECT"
ui_exe = "E:\\Qt\\Qt5.13.2\\5.13.2\\msvc2017_64\\bin\\uic.exe"
moc_exe = "E:\\Qt\\Qt5.13.2\\5.13.2\\msvc2017_64\\bin\\moc.exe"
def getAllFilesWithSuffix(path, suffix):
resultFiles = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(suffix):
resultFiles.append(os.path.join(root, file))
return resultFiles
def getAllFilesWithPrefix(path, prefix):
resultFiles = []
for root, dirs, files in os.walk(path):
for file in files:
if file.startswith(prefix):
resultFiles.append(os.path.join(root, file))
return resultFiles
def getAllFilesWithSuffixAndContain(path, suffix, containString):
matchSuffixFiles = getAllFilesWithSuffix(path, suffix)
matchFiles = []
for file in matchSuffixFiles:
with open(file, encoding="utf8", mode='r') as fid:
content = fid.read()
if (containString in content):
matchFiles.append(file)
return matchFiles
def removeUIResultFiles(path):
uiresult_files = getAllFilesWithPrefix(".\\", uiprefix)
for file in uiresult_files:
os.remove(file)
def removeMOCResultFiles(path):
mocresult_files = getAllFilesWithPrefix(".\\", mocprefix)
for file in mocresult_files:
os.remove(file)
def removeUIAndMOCResultFiles(path):
removeUIResultFiles(path)
removeMOCResultFiles(path)
def convertUIFilename(uifile):
dirname = os.path.dirname(uifile)
basename = os.path.basename(uifile)
basename = uiprefix + basename
basename = basename.replace(ui_original_suffix, ui_result_suffix)
return os.path.join(dirname,basename)
def convertMOCFilename(mocfile):
dirname = os.path.dirname(mocfile)
basename = os.path.basename(mocfile)
basename = mocprefix + basename
basename = basename.replace(moc_original_suffix, moc_result_suffix)
return os.path.join(dirname,basename)
def generateUICResult(path):
uifiles = getAllFilesWithSuffix(path, ui_original_suffix)
with open("generateUIC.bat", "w") as fid:
for file in uifiles:
resultfile = convertUIFilename(file)
fid.write(ui_exe + " " + file + " -o " + resultfile + "\n")
os.system("generateUIC.bat")
def generateMOCResult(path):
mocfiles = getAllFilesWithSuffixAndContain(path, moc_original_suffix, moc_content)
with open("generateMOC.bat", "w") as fid:
for file in mocfiles:
resultfile = convertMOCFilename(file)
fid.write(moc_exe + " " + file + " -o " + resultfile + "\n")
os.system("generateMOC.bat")
当执行完脚本之后,再执行cmake中的generator,这样会将生成的文件添加到visual studio c++项目中。
另外在构建的时候发现,到执行moc的时候,如果遇到Q_INTERFACES,那么可能会报:Undefined interface的错误,这个时候,可以参照moc'ing 'Undefined interface' with visual studio,在执行moc命令的时候追加-I
路径即可。
其他额外的错误,按照编译错误提醒,进行处理即可。
作者: grassofsky
出处: http://www.cnblogs.com/grass-and-moon
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(grass-of-sky@163.com)咨询.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步