• 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 + "
    ")
        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 + "
    ")
        os.system("generateMOC.bat")
    

    当执行完脚本之后,再执行cmake中的generator,这样会将生成的文件添加到visual studio c++项目中。

    另外在构建的时候发现,到执行moc的时候,如果遇到Q_INTERFACES,那么可能会报:Undefined interface的错误,这个时候,可以参照moc'ing 'Undefined interface' with visual studio,在执行moc命令的时候追加-I路径即可。

    其他额外的错误,按照编译错误提醒,进行处理即可。

  • 相关阅读:
    怎样开始学日语
    转 送给日语初学者的寄语
    分享一个flash播放音乐的类
    日语网址
    北京奥运会门票价格一览表
    上班防沉迷系统
    ActionScript 3.0 概要
    Actionscript 3学习资源
    客户导入后需要Update的字段
    ORA01219
  • 原文地址:https://www.cnblogs.com/grass-and-moon/p/14120169.html
Copyright © 2020-2023  润新知