2013-11-01 56 views
0

我將我的項目從Qt4遷移到Qt5。在Qt4中與CMake結合使用了變量QT_INCLUDE_DIR和QT_LIBRARY_DIR。 Qt5中缺少它們。我需要的是替換這兩個變量,因爲我有一些頭文件/庫位於Qt安裝(如QScintilla2)使用庫和CMake包括Qt5安裝的基本目錄

我使用Qt5Widgets作爲模塊,我的第一個想法是使用此路徑和使用..獲取父路徑 - 但Qt5Widgets_LIBRARIES返回庫(名稱)而不是路徑(切斷庫?)。此外,Qt5Widgets_INCLUDE_DIRS的返回值看起來像一個巨大的(附加)路徑(不包含不同包含目錄之間的空格)

那麼 - 任何想法或解決方案?該解決方案應該兼容Unix/Linux,OS X和Windows

+0

我想你可以使用'QMAKE_INCDIR'和'QMAKE_LIBDIR'代替。 – vahancho

+0

嘿@vahancho我覺得依靠QMake不是一個很好的IDEE – swaechter

回答

2

在與CMake玩弄後,我來到了以下解決方案。我搜索包括,然後找到它們,我使用Qt5Widgets的庫路徑。在這種情況下,該工程沒有問題beaucause 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()