すべての開発用PCにたくさんのQtコピーがあります。各プロジェクトには、サードパーティディレクトリに独自のQtコピーがあります。これは、各プロジェクトが独自のQtで開発およびテストされているために行われます。多くの場合、プロジェクトによってはQtのカスタムビルドが必要になります。したがって、上記の理由により、さまざまなQtビルドを保持するための個別のSVNリポジトリと、各Qtプロジェクトに外部があります。これはそれらのビルドの1つを指します。
問題は、CMakeを使用する場合、Qtのバージョンしか選択できず、Qt4ファインダーが使用するQtを単独で決定することです。そして、それは正しいものではありません。ファインダーをリダイレクトして、プロジェクトのサードパーティディレクトリにある特定のQtコピーのすべてのものを構成する必要があります。
私はそのようなPATHS
オプションを指定しようとしましFIND_PACKAGE
た:FIND_PACKAGE( Qt4 REQUIRED PATHS "thirdparty/Qt" )
しかしそれは役に立ちませんでした。変数を設定しようとしましQT_QMAKE_EXECUTABLE
たが、うまくいきませんでした。インストールする前に、必要なQMakeのパス(すべてのディレクトリを決定するためにFindQt4.cmakeによって使用される)をPATH変数に追加しようとしましたが、それも役に立ちませんでした。
FIND_PACKAGEが提供するすべてのものを使用する方法はありますが、特定のQtコピー用ですか?私は本当にすべてのQtラッパーを実装したり、すべての定義、インクルード、dirsなどを手動で設定したりしたくありません。
これが私のCMakeプロジェクトです。多分それは役立つでしょう:
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
#############################################################################
MACRO( ADD_FILES_TO_FILTER rootFilterName rootFilterPath files )
FOREACH( curFile ${files} )
FILE( RELATIVE_PATH curFilter "${CMAKE_CURRENT_SOURCE_DIR}/${rootFilterPath}" "${CMAKE_CURRENT_SOURCE_DIR}/${curFile}" )
FILE( RELATIVE_PATH test "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${curFile}" )
GET_FILENAME_COMPONENT( curFilter ${curFilter} PATH )
SET( curFilter "${rootFilterName}/${curFilter}" )
STRING( REPLACE "/" "\\\\" curFilter ${curFilter} )
SOURCE_GROUP( ${curFilter} FILES ${curFile} )
ENDFOREACH( curFile )
ENDMACRO( ADD_FILES_TO_FILTER rootFilterName rootFilterPath files )
MACRO( TO_RELATIVE_PATHS filePaths )
SET( resPaths "" )
FOREACH( curPath ${${filePaths}} )
FILE( RELATIVE_PATH relPath ${CMAKE_CURRENT_SOURCE_DIR} ${curPath} )
SET( resPaths ${resPaths} ${relPath} )
ENDFOREACH( curPath )
SET( ${filePaths} ${resPaths} )
ENDMACRO( TO_RELATIVE_PATHS filePaths )
######################################################################
# Define project settings
PROJECT( RealTimeCapture )
FIND_PACKAGE( Qt4 REQUIRED PATHS "thirdparty/Qt" )
SET( BOOST_ROOT "thirdparty/boost" )
FIND_PACKAGE( Boost REQUIRED )
# Collect all required files for build
FILE( GLOB_RECURSE headers RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/RTCF/include/*.h" )
FILE( GLOB_RECURSE sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/RTCF/src/*.cpp" )
FILE( GLOB_RECURSE resources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.qrc" )
FILE( GLOB_RECURSE forms RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.ui" )
# Preprocess all Qt files
QT4_WRAP_CPP( header_mocs ${headers} )
QT4_WRAP_UI( form_headers ${forms} )
QT4_ADD_RESOURCES( resources_rcc ${resources} )
# Convert all generated files paths to relative ones
TO_RELATIVE_PATHS( header_mocs )
TO_RELATIVE_PATHS( form_headers )
TO_RELATIVE_PATHS( resources_rcc )
# Create executable
ADD_EXECUTABLE( RealTimeCapture ${headers} ${sources} ${header_mocs} ${form_headers} ${resources_rcc} )
SET_TARGET_PROPERTIES( RealTimeCapture PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-" )
# Set filters for project according to its namespaces
FILE( RELATIVE_PATH buildDir ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
ADD_FILES_TO_FILTER( "Headers" "src/RTCF/include" "${headers}" )
ADD_FILES_TO_FILTER( "Sources" "src/RTCF/src" "${sources}" )
ADD_FILES_TO_FILTER( "Generated" "${buildDir}/src/RTCF/include" "${header_mocs}" )
ADD_FILES_TO_FILTER( "Forms" "${buildDir}/src/RTCF/include" "${form_headers}" )
ADD_FILES_TO_FILTER( "Resources" "${buildDir}" "${resources_rcc}" )
# Set additional include directories
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
INCLUDE_DIRECTORIES( "src" )
INCLUDE_DIRECTORIES( "src/RTCF/include" )
INCLUDE_DIRECTORIES( "thirdparty" )
# Configure Qt
SET( QT_USE_QTNETWORK TRUE )
SET( QT_USE_QTSQL TRUE )
SET( QT_USE_QTSCRIPT TRUE )
SET( QT_USE_QTXML TRUE )
SET( QT_USE_QTWEBKIT TRUE )
INCLUDE( ${QT_USE_FILE} )
ADD_DEFINITIONS( ${QT_DEFINITIONS} )
TARGET_LINK_LIBRARIES( RealTimeCapture ${QT_LIBRARIES} )
# Add boost support
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
TARGET_LINK_LIBRARIES( RealTimeCapture ${Boost_LIBRARIES} )
# Add other libs include dirs
INCLUDE_DIRECTORIES( "thirdparty/SimpleCrypt" )
INCLUDE_DIRECTORIES( "thirdparty/id3lib/include" )
INCLUDE_DIRECTORIES( "thirdparty/libtwitcurl" )
INCLUDE_DIRECTORIES( "thirdparty/curl-7.24.0/curl/include" )
INCLUDE_DIRECTORIES( "thirdparty/log4qt/include" )
INCLUDE_DIRECTORIES( "thirdparty/fervor-auto" )
# Add defines
ADD_DEFINITIONS( RealTimeCapture -DQUAZIP_STATIC )
ADD_DEFINITIONS( RealTimeCapture -DBUILDING_LIBCURL )
ADD_DEFINITIONS( RealTimeCapture -DID3LIB_LINKOPTION=1 )
ADD_DEFINITIONS( -DUNICODE -D_UNICODE ) #enable unicode support
アップデート
QT_QMAKE_EXECUTABLE
受け入れられた回答へのコメントで言及されているように、私はCMake変数を設定することによってカスタムqmake.exe(OS PATH変数に追加されたものとは異なる)を設定することができました。しかし、問題は、qmake実行可能ファイルにすべてのQtのモジュールへのパスがハードコードされていることでした。だから私はカスタムqt.conf
ファイルを提供することでそれを解決しました(答えに記載されているように)。私はインターネットでそれの例を見つけていないので、ここにあります、多分それは誰かを助けるでしょう:
[Paths]
Prefix=..
Documentation=doc
Headers=include
Libraries=lib
Binaries=bin
Plugins=plugins
Imports=imports
Data=
Translations=
Settings=
Examples=
Demos=
まさにこれを使いました。ただし、プレフィックスにQtインストールへの絶対パスを指定することを検討できます。任意の場所に複製できる絶対パスをリポジトリで使用したくありませんでした。の使用の詳細については、このリンクを参照してくださいqt.conf
。