0

我将我的项目从 Qt4 迁移到 Qt5。在 Qt4 中结合 CMake 有变量 QT_INCLUDE_DIR 和 QT_LIBRARY_DIR。它们在 Qt5 中丢失了。我需要的是替换这两个变量,因为我在 Qt 安装中有一些头文件/库(如 QScintilla2)

我使用 Qt5Widgets 作为模块,我的第一个想法是使用此路径并使用 .. 来获取父路径 - 但 Qt5Widgets_LIBRARIES 返回库(名称)而不是路径(切断库?)。Qt5Widgets_INCLUDE_DIRS 的返回值也看起来像一个巨大的(附加的)路径(不同的包含目录之间没有空格)

那么 - 任何想法或解决方案?该解决方案应兼容 Unix/Linux、OS X 和 Windows

4

1 回答 1

2

在玩过 CMake 之后,我找到了以下解决方案。我搜索包含,找到它们后,我使用 Qt5Widgets 的库路径。在这种情况下,这没有问题,因为 QScintilla 将自身安装在 Qt 目录中(以及 Linux 下的 lib 目录中):

# Module file for QScintilla - compiled with Qt5. These variables are available:
# QSCINTILLA2_FOUND = Status of QScintilla
# QSCINTILLA2_INCLUDE_DIR = QScintilla include dir
# QSCINTILLA2_LIBRARY = QScintilla library

# Check
if(${Qt5Widgets_FOUND})

    # Set as not found
    set(QSCINTILLA2_FOUND false)

    # Iterate over the include list of the Qt5Widgets module
    foreach(TEMPPATH in ${Qt5Widgets_INCLUDE_DIRS})

        # Check for a Qsci directory
        find_path(QSCINTILLA2_INCLUDE_DIR qsciglobal.h ${TEMPPATH}/Qsci)

        # Found - break loop
        if(QSCINTILLA2_INCLUDE_DIR)
            break()
        endif()

    endforeach()

    # Check
    if(QSCINTILLA2_INCLUDE_DIR)

        # Get Qt5Widgets library and cut off the library name
        get_target_property(QT5_WIDGETSLIBRARY Qt5::Widgets LOCATION)
        get_filename_component(QT5_WIDGETSLIBRARYPATH ${QT5_WIDGETSLIBRARY} PATH)

        # Add library
        set(LIBRARYPATH ${QT5_WIDGETSLIBRARYPATH} "/usr/lib/" "/usr/local/lib")
        find_library(QSCINTILLA2_LIBRARY NAMES libqscintilla2.a qscintilla2.lib PATHS ${LIBRARYPATH})

        # Check
        if(QSCINTILLA2_LIBRARY)
            # Enable library
            set(QSCINTILLA2_FOUND true)
            mark_as_advanced(QSCINTILLA2_INCLUDE_DIR QSCINTILLA2_LIBRARY)
        else()
            message(FATAL_ERROR "QScintilla2 library not found")
        endif()

    else()
        message(FATAL_ERROR "Cannot find QScintilla2 header")
    endif()

else()
    message(FATAL_ERROR "Qt5Widgets module not found")
endif()
于 2013-11-02T10:57:29.927 回答