Author: Kang Lin kl222@126.com
[x] Cross-platform, support multiple operating systems
Mac os and IOS, I don't have the corresponding equipment,
please compile and test the students with the corresponding equipment.
Qt (official release): https://download.qt.io/official_releases/qt/
Environment variable
export QT_ROOT=Qt install root
# Needed by complied AppImage
export QMAKE=$QT_ROOT/bin/qmake
# When Qt6
export Qt6_ROOT=$QT_ROOT
# When Qt5
export Qt5_ROOT=$QT_ROOT
# Or
# When Qt6
export Qt6_DIR=$QT_ROOT/lib/cmake/Qt6
# When Qt5
export Qt5_DIR=$QT_ROOT/lib/cmake/Qt5
CMAKE parameters
# Qt6
cmake -DQT_ROOT=[Qt install root] -DQt6_DIR=[Qt install root]/lib/cmake/Qt6 ......
# Qt5
cmake -DQT_ROOT=[Qt install root] -DQt5_DIR=[Qt install root]/lib/cmake/Qt5 ......
# Needed by complied AppImage
export QMAKE=$QT_ROOT/bin/qmake
System built-in:
Qt5:
~$ sudo apt install qttools5-dev qttools5-dev-tools qtbase5-dev qtbase5-dev-tools qtmultimedia5-dev qtlocation5-dev libqt5svg5-dev
Qt6: See: Script/build_depend.sh
~$ sudo apt install qmake6 qt6-tools-dev qt6-tools-dev-tools qt6-base-dev qt6-base-dev-tools qt6-qpa-plugins libqt6svg6-dev qt6-l10n-tools qt6-translations-l10n qt6-scxml-dev qt6-multimedia-dev
When multiple distributions of Qt are installed on the system.
For example: Install Qt5 and Qt6 at the same time.
The system uses the qtchooser tool to select the current Qt version.
l@l:/home/RabbitRemoteControl$ qtchooser
Usage:
qtchooser { -l | -list-versions | -print-env }
qtchooser -install [-f] [-local] <name> <path-to-qmake>
qtchooser -run-tool=<tool name=""> [-qt=<qt version="">]</qt> [program arguments]
<executable name=""> [-qt=<qt version="">]</qt> [program arguments]</executable></tool></path-to-qmake></name>
Environment variables accepted:
QTCHOOSER_RUNTOOL name of the tool to be run (same as the -run-tool argument)
QT_SELECT version of Qt to be run (same as the -qt argument)
List which version of Qt is currently installed on your system
l@l:/home/RabbitRemoteControl$ qtchooser -l
4
5
default
qt4-x86_64-linux-gnu
qt4
qt5-x86_64-linux-gnu
qt5
qt6
# View the Qt version of your current environment
l@l:/home/RabbitRemoteControl$ qtchooser --print-env
QT_SELECT="default"
QTTOOLDIR="[Paths]"
QTLIBDIR="Prefix=/usr"
Set the Qt version of your current environment
export QT_SELECT=qt6 # Set the Qt6 version of your current environment
# View the Qt version of your current environment
l@l:/home/RabbitRemoteControl$ qtchooser --print-env
QT_SELECT="qt6"
QTTOOLDIR="/usr/lib/qt6/bin"
QTLIBDIR="/usr/lib/aarch64-linux-gnu"
git clone https://github.com/KangLin/RabbitCommon.git
Create and enter the build directory
git clone --recursive https://github.com/KangLin/Calendar.git
cd Calendar
mkdir build
Compile
windows or linux
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=`pwd`/install \
-DCMAKE_BUILD_TYPE=Release \
-DQt6_DIR=${QT_ROOT}/lib/cmake/Qt6 \
-DRabbitCommon_ROOT=
cmake --build . --config Release --target install
android: version greater than 6
Compile
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="armeabi-v7a with NEON" \
-DANDROID_PLATFORM=android-18 \
-DQT_ROOT=... -DQt6_DIR=... \
-DRabbitCommon_ROOT=
cmake --build . --config Release --target install
The host is windows
Compile
cd build
cmake .. -G"Unix Makefiles" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build ^
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake ^
-DCMAKE_MAKE_PROGRAM=${ANDROID_NDK}/prebuilt/windows-x86_64/bin/make.exe ^
-DANDROID_PLATFORM=android-18 ^
-DANDROID_ABI=arm64-v8a ^
-DANDROID_ARM_NEON=ON ^
-DQT_ROOT=... -DQt6_DIR=... ^
-DRabbitCommon_ROOT=
cmake --build . --config Release --target install
Parameter Description: https://developer.android.google.cn/ndk/guides/cmake
Install apk to devices
adb install android-build-debug.apk
Note
windows
If you build app. Qt does not provide openssl dynamic library for copyright reasons, so you must copy the dynamic library of openssl to the installation directory.
linux
sudo apt-get install libssl1.1
pro
Library mode:
Add the following code to the project file:
isEmpty(Calendar_DIR): Calendar_DIR=$ENV{Calendar_DIR}
isEmpty(Calendar_DIR){
message("1. Please download Calendar source code from https://github.com/KangLin/Calendar")
message(" ag:")
message(" git clone https://github.com/KangLin/Calendar.git")
message("2. Build the project, get library")
error("2. Then set value Calendar_DIR to library root directory")
}
INCLUDEPATH *= $${Calendar_DIR}/include $${Calendar_DIR}/include/export
LIBS *= -L$${Calendar_DIR}/lib -lLunarCalendar -lCalendar
cmake
Source code
Submodule mode
add_subdirectory(3th_libs/Calendar/Src)
Non-submodule mode
```
if( "${RabbitCommon_ROOT}" STREQUAL "" )
set(RabbitCommon_ROOT $ENV{RabbitCommon_ROOT})
if( "${RabbitCommon_ROOT}" STREQUAL "" )
set(RabbitCommon_ROOT ${CMAKE_SOURCE_DIR}/../RabbitCommon)
endif()
endif()
if(DEFINED RabbitCommon_ROOT AND EXISTS ${RabbitCommon_ROOT}/Src)
add_subdirectory(${RabbitCommon_ROOT}/Src ${CMAKE_BINARY_DIR}/RabbitCommon)
include(${RabbitCommon_ROOT}/cmake/Translations.cmake)
else()
message("1. Please download RabbitCommon source code from https://github.com/KangLin/RabbitCommon")
message(" ag:")
message(" git clone https://github.com/KangLin/RabbitCommon.git")
message("2. Then set cmake value or environment variable RabbitCommon_ROOT to download root directory.")
message(" ag:")
message(FATAL_ERROR " cmake -DRabbitCommon_ROOT= ")
endif()
set(Calendar_DIR $ENV{Calendar_DIR} CACHE PATH "Set Calendar source code root directory.")
if(EXISTS ${Calendar_DIR}/Src)
add_subdirectory(${Calendar_DIR}/Src ${CMAKE_BINARY_DIR}/Calendar)
else()
message("1. Please download Calendar source code from https://github.com/KangLin/Calendar")
message(" ag:")
message(" git clone https://github.com/KangLin/Calendar.git")
message("2. Then set cmake value or environment variable Calendar_DIR to download root directory.")
message(" ag:")
message(FATAL_ERROR " cmake -DCalendar_DIR= ")
endif()
```
Library mode:
Cmake parameter Calendar_DIR specifies the installation root directory
FIND_PACKAGE(Calendar)
Add libraries and include in CMakeLists.txt
SET(APP_LIBS ${PROJECT_NAME} ${QT_LIBRARIES})
if(Calendar_FOUND)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DCalendar)
target_include_directories(${PROJECT_NAME}
PRIVATE "${Calendar_INCLUDE_DIRS}/Src"
"${Calendar_INCLUDE_DIRS}/Src/export")
set(APP_LIBS ${APP_LIBS} ${Calendar_LIBRARIES})
endif()
target_link_libraries(${PROJECT_NAME} ${APP_LIBS})