zoukankan      html  css  js  c++  java
  • 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路径即可。

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

  • 相关阅读:
    <Android 应用 之路> 天气预报(五)
    Java图形界面开发—列出指定目录
    解决The Network Adapter could not establish the connection
    <Android 应用 之路> 天气预报(四)
    Java集合框架—List
    Java集合框架—Map
    C#工程缺少IIS组件无法打开的解决办法
    关于com工程依赖的一些总结
    C:移位运算符
    void类型及void指针
  • 原文地址:https://www.cnblogs.com/grass-and-moon/p/14120169.html
Copyright © 2011-2022 走看看