我正在尝试使用 cmake 和 MXE 为 Windows 进行交叉编译。
在 *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 ) 似乎交叉编译grantlee,但是它在安装目标失败(当然我不能在我的系统上安装Windows二进制文件)
add_library(Grantlee5 /usr/local/src/grantlee/) 分解了 find_library 语句。Grantlee 得到构建,但链接失败(包括grantlee/engine.h 未找到)
如何告诉 cmake 从源代码为特定目标构建 Grantlee 和 Qt5WebKitWidgets(同时使用可用的二进制文件进行动态链接)?什么是“正确”的做法?