Add an example using CMakes FetchContent module

This commit is contained in:
Diego Schulz 2023-10-13 21:07:08 -03:00
parent 8c48163c4d
commit af2f7a2cfd
No known key found for this signature in database
GPG Key ID: E4595B2BA20C0F9E

View File

@ -60,6 +60,50 @@ add_subdirectory(src/third-party/singleapplication)
target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication) target_link_libraries(${PROJECT_NAME} SingleApplication::SingleApplication)
``` ```
Directly including this repository as a Git submodule, or even just a shallow copy of the
source code into new projects might not be ideal when using CMake.
Another option is using CMake's `FetchContent` module, available since version `3.11`.
```cmake
# Define the minumun CMake version, as an example 3.24
cmake_minimum_required(VERSION 3.24)
# Include the module
include(FetchContent)
# If using Qt6, override DEFAULT_MAJOR_VERSION
set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "Qt version to use, defaults to 6")
# Set QAPPLICATION_CLASS
set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication")
# Declare how is the source going to be obtained
FetchContent_Declare(
SingleApplication
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication
GIT_TAG master
#GIT_TAG e22a6bc235281152b0041ce39d4827b961b66ea6
)
# Fetch the repository and make it available to the build
FetchContent_MakeAvailable(SingleApplication)
# Then simply use find_package as usual
find_package(SingleApplication)
# Finally add it to the target_link_libraries() section
target_link_libraries(ClientePOS PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::Sql
SingleApplication::SingleApplication
)
```
The library sets up a `QLocalServer` and a `QSharedMemory` block. The first The library sets up a `QLocalServer` and a `QSharedMemory` block. The first
instance of your Application is your Primary Instance. It would check if the instance of your Application is your Primary Instance. It would check if the
shared memory block exists and if not it will start a `QLocalServer` and listen shared memory block exists and if not it will start a `QLocalServer` and listen