Skip to content

Commit 14e1d29

Browse files
meta_project -> qml_multi_crates & enable CMake
qml_multi_crates is the grand finale in our quest for CMake&Cargo compatibility. It is a project that can be built as a Cargo lib and binary, as well as imported into CMake with a C++ binary and uses multiple Cargo crates internally. It does rely on the init_crate! and init_qml_module! macros, but otherwise works quite seamless.
1 parent 768ba4b commit 14e1d29

18 files changed

+26
-24
lines changed

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ members = [
1818
"examples/qml_features/rust",
1919
"examples/qml_minimal/rust",
2020
"examples/qml_basics",
21-
"examples/meta_project/rust/main",
22-
"examples/meta_project/rust/sub1",
23-
"examples/meta_project/rust/sub2",
21+
"examples/qml_multi_crates/rust/main",
22+
"examples/qml_multi_crates/rust/sub1",
23+
"examples/qml_multi_crates/rust/sub2",
2424

2525
"tests/basic_cxx_only/rust",
2626
"tests/basic_cxx_qt/rust",

examples/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# When using `cargo test`
1010
add_subdirectory(qml_features)
1111
add_subdirectory(qml_minimal)
12-
# add_subdirectory(meta_project)
12+
add_subdirectory(qml_multi_crates)
1313

1414
# TODO: get demo_threading working for wasm builds
1515
if(NOT BUILD_WASM)

examples/meta_project/CMakeLists.txt renamed to examples/qml_multi_crates/CMakeLists.txt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
cmake_minimum_required(VERSION 3.24)
77

8-
project(example_meta_project)
8+
project(example_qml_multi_crates)
99

1010
# Rust always links against non-debug Windows runtime on *-msvc targets
1111
# Note it is best to set this on the command line to ensure all targets are consistent
@@ -51,20 +51,22 @@ if(NOT CxxQt_FOUND)
5151
FetchContent_MakeAvailable(CxxQt)
5252
endif()
5353

54-
cxx_qt_import_crate(MANIFEST_PATH rust/main/Cargo.toml CRATES qml_meta_project)
55-
target_link_libraries(qml_meta_project INTERFACE Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2)
54+
cxx_qt_import_crate(MANIFEST_PATH rust/main/Cargo.toml
55+
CRATES qml_multi_crates
56+
CRATE_TYPES staticlib
57+
QT_MODULES Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2 Qt::Network)
5658

57-
cxx_qt_import_qml_module(qml_meta_project_main
59+
cxx_qt_import_qml_module(qml_multi_crates_main
5860
URI "com.kdab.cxx_qt.demo"
59-
SOURCE_CRATE qml_meta_project)
61+
SOURCE_CRATE qml_multi_crates)
6062

61-
cxx_qt_import_qml_module(qml_meta_project_sub1
63+
cxx_qt_import_qml_module(qml_multi_crates_sub1
6264
URI "com.kdab.cxx_qt.demo.sub1"
63-
SOURCE_CRATE qml_meta_project)
65+
SOURCE_CRATE qml_multi_crates)
6466

65-
cxx_qt_import_qml_module(qml_meta_project_sub2
67+
cxx_qt_import_qml_module(qml_multi_crates_sub2
6668
URI "com.kdab.cxx_qt.demo.sub2"
67-
SOURCE_CRATE qml_meta_project)
69+
SOURCE_CRATE qml_multi_crates)
6870

6971
# Define the executable with the C++ source
7072
if(BUILD_WASM)
@@ -74,13 +76,13 @@ if(BUILD_WASM)
7476
#
7577
# TODO: Figure out how to configure such that
7678
# we can use add_executable for WASM
77-
qt_add_executable(example_meta_project cpp/main.cpp)
79+
qt_add_executable(example_qml_multi_crates cpp/main.cpp)
7880
else()
79-
add_executable(example_meta_project cpp/main.cpp)
81+
add_executable(example_qml_multi_crates cpp/main.cpp)
8082
endif()
8183

82-
# Link to the qml module, which in turn links to the Rust qml_meta_project library
83-
target_link_libraries(example_meta_project PRIVATE Qt::Core Qt::Gui Qt::Qml qml_meta_project_main qml_meta_project_sub1 qml_meta_project_sub2)
84+
# Link to the qml module, which in turn links to the Rust qml_multi_crates library
85+
target_link_libraries(example_qml_multi_crates PRIVATE Qt::Core Qt::Gui Qt::Qml qml_multi_crates_main qml_multi_crates_sub1 qml_multi_crates_sub2)
8486

8587
# If we are using a statically linked Qt then we need to import any qml plugins
86-
qt_import_qml_plugins(example_meta_project)
88+
qt_import_qml_plugins(example_qml_multi_crates)

examples/meta_project/rust/main/Cargo.toml renamed to examples/qml_multi_crates/rust/main/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
#
44
# SPDX-License-Identifier: MIT OR Apache-2.0
55
[package]
6-
name = "qml_meta_project"
6+
name = "qml_multi_crates"
77
version = "0.1.0"
88
authors = ["Andrew Hayzen <[email protected]>"]
99
edition = "2021"
1010
license = "MIT OR Apache-2.0"
1111

12-
# [lib]
13-
# crate-type = ["staticlib", "lib"]
12+
[lib]
13+
crate-type = ["staticlib", "lib"]
1414

1515
[dependencies]
1616
sub1 = { path = "../sub1" }

examples/meta_project/rust/main/src/main.rs renamed to examples/qml_multi_crates/rust/main/src/main.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
//
44
// SPDX-License-Identifier: MIT OR Apache-2.0
55

6-
extern crate qml_meta_project;
6+
extern crate qml_multi_crates;
77

88
use cxx_qt_lib::{QGuiApplication, QQmlApplicationEngine, QUrl};
99

1010
fn main() {
11-
cxx_qt::init_crate!(qml_meta_project);
11+
cxx_qt::init_crate!(qml_multi_crates);
1212
cxx_qt::init_qml_module!("com.kdab.cxx_qt.demo");
1313

1414
// Create the application and engine
@@ -42,7 +42,7 @@ mod tests {
4242
// Otherwise linking will fail!
4343
#[test]
4444
fn init_dependencies() {
45-
cxx_qt::init_crate!(qml_meta_project);
45+
cxx_qt::init_crate!(qml_multi_crates);
4646
cxx_qt::init_qml_module!("com.kdab.cxx_qt.demo");
4747
}
4848
}

0 commit comments

Comments
 (0)