C++ QT: как перекрестно скомпилировать проект QT5/6 CMake?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ QT: как перекрестно скомпилировать проект QT5/6 CMake?

Сообщение Anonymous »

Я пытаюсь перекрестно скомпилировать проект QT, который использует CMake из Linux. Из этой темы я узнал о MXE. Я скомпилировал следующие пакеты:
qtbase
qt6
qt5

Однако запуск /usr/x86_64-w64-mingw32.shared/qt5/bin/qmake && make не дает никакого эффекта, поскольку проект не содержит файлов .pro, а только CMakeLists.txt.
Я также пробовал установить компиляторы, расположенные в /opt/mxe каталог
set(CMAKE_C_COMPILER /opt/mxe/usr/bin/i686-w64-mingw32.static-gcc)
set(CMAKE_CXX_COMPILER /opt/mxe/usr/bin/i686-w64-mingw32.static-g++)

но результатом является всего лишь ошибка при макетной компиляции:
i686-w64-mingw32.static-g++: error: unrecognized command-line option '-mno-direct-extern-access'
Я также пробовал использовать gcc, который я использовал для компиляции пакетов, отличных от Qt:
/usr/bin/x86_64-w64-mingw32-c и /usr/bin/x86_64-w64-mingw32-c соответственно, но результатом была ошибка включения:
/usr/include/qt6/QtGui/qwindowdefs.h:56:12: fatal error: QtGui/qwindowdefs_win.h: No such file or directory
Вот сам файл CMake:
cmake_minimum_required(VERSION 3.16)

project(cross_qt)

set(CMAKE_SYSTEM_NAME Windows)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-c)
set(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-c++)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Svg)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS SvgWidgets)

set(PROJECT_SOURCES
src/main.cpp
src/mainwindow.cpp
src/mainwindow.ui
src/mainwindow.hpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(cross_qt
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
endif()

target_link_libraries(cross_qt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(cross_qt PRIVATE Qt${QT_VERSION_MAJOR}::Svg)
target_link_libraries(cross_qt PRIVATE Qt${QT_VERSION_MAJOR}::SvgWidgets)

include(GNUInstallDirs)
install(TARGETS cross_qt
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(cross_qt)
endif()


Подробнее здесь: https://stackoverflow.com/questions/797 ... ke-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»