5

Windows用にクロスコンパイルするためにcmakeとMXEを使用しようとしています。

*nix ではすべて正常に動作します。ただし、一部の依存関係 (Grantlee5 および Qt5WebKitWidgets) を取得して MinGW およびクロス コンパイルで動作させる方法がわかりません。これが私のCMakeLists.txtの(最小限の)例です:

cmake_minimum_required(VERSION 2.8.11)
project(MyProject)

set(QT_USE_QTXML TRUE)
set(QT_USE_QTWEBKIT TRUE)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") 

# Instruct CMake to run moc automaticall when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

#find packages
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Grantlee5 REQUIRED)
find_package(Qt5WebKitWidgets REQUIRED) 
find_package(Git)

#(...) add all sources

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Tell CMake to create the executable
add_executable(MyProjectExec ${SRCS})

target_link_libraries(MyProjectExec
              Qt5::Widgets
              Qt5::Xml
              Grantlee5::Templates
              Qt5::WebKitWidgets
             )

「cmake」を使用するだけで問題なく動作します。ただし、MXE のツールチェーンを使用して Widnows (i686-w64-mingw32.static-cmake) 用にクロス コンパイルすると、Grantlee5 と Qt5WebKitWidgets は次のメッセージで失敗します。

CMakeLists.txt:xx (find_package) でエラーを作成: 要求されたバージョン "" と互換性のあるパッケージ "Grantlee5" の構成ファイルが見つかりませんでした。[原文のまま]

次の構成ファイルが考慮されましたが、受け入れられませんでした:

/usr/lib/cmake/Grantlee5/Grantlee5Config.cmake, version: 5.0.0 (64bit)

もちろん、私の Grantlee5 バイナリは Windows/MinGW と互換性がありません。

ExternalProject_Add(Grantlee5 GIT_REPOSITORY https://github.com/steveire/grantlee.git ) はグラントリーをクロスコンパイルしているようですが、インストールターゲットで失敗します (もちろん、システムに Windows バイナリをインストールすることはできません)。

add_library(Grantlee5 /usr/local/src/grantlee/) は、find_library ステートメントを分割します。Grantlee はビルドを取得しますが、リンクに失敗します (grantlee/engine.h が見つかりません)

特定のターゲットのソースから Grantlee と Qt5WebKitWidgets をビルドするように cmake に指示する方法は? それを行う「正しい」方法は何ですか?

4

0 に答える 0