rust-qt-binding-generator/templates/qt_widgets/CMakeLists.txt

78 lines
2.2 KiB
CMake

project (my_rust_qt_widgets_project)
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
cmake_policy(SET CMP0046 NEW)
cmake_policy(SET CMP0063 NEW)
cmake_policy(SET CMP0071 NEW)
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER)
if(CMAKE_BUILD_TYPE_UPPER STREQUAL DEBUG)
set(RUST_TARGET_DIR target/debug/)
set(RUST_BUILD_FLAG)
else()
set(RUST_TARGET_DIR target/release/)
set(RUST_BUILD_FLAG --release)
endif()
### find dependencies ###
include(FeatureSummary)
find_package(Cargo REQUIRED)
find_package(Rust REQUIRED)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
set(QT_MIN_VERSION "5.6.0")
find_package(Qt5 ${QT_MIN_VERSION} CONFIG
REQUIRED COMPONENTS
Widgets
)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
find_package(RustQtBindingGenerator REQUIRED)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
### build commands ###
SET(RUST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rust")
if (MSVC)
SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/rust.lib")
else()
SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a")
endif()
# generate c++ and rust code from bindings.json
add_custom_command(
OUTPUT "${RUST_DIR}/src/interface.rs"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.cpp"
COMMAND "${RustQtBindingGenerator_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/bindings.json"
DEPENDS bindings.json
)
# compile the rust code into a static library
add_custom_command(
OUTPUT "${RUST_LIB}"
COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG}
DEPENDS rust/src/lib.rs
rust/src/implementation.rs
rust/src/interface.rs
WORKING_DIRECTORY "${RUST_DIR}"
)
add_custom_target(rust_target DEPENDS "${RUST_LIB}")
list(APPEND Libs "${RUST_LIB}")
list(APPEND Libs Qt5::Widgets Threads::Threads ${CMAKE_DL_LIBS})
set(SRCS src/main.cpp src/Bindings.cpp)
add_executable(MyExe ${SRCS})
add_dependencies(MyExe rust_target)
target_link_libraries(MyExe ${Libs})
set_target_properties(MyExe PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
)