Sie können dazu die ExternalProject
module verwenden. Es wurde entwickelt, um externe Abhängigkeiten aufzubauen - auch solche, die CMake nicht verwenden. Hier ist ein useful article auf die Verwendung.
So sagen, Sie haben Ihre "Common-Rost" Unterverzeichnis und seine Cargo.toml enthält:
[package]
name = "rust_example"
version = "0.1.0"
[lib]
name = "rust_example"
crate-type = ["staticlib"]
und es macht eine Funktion add
über seine lib.rs:
#[no_mangle]
pub extern fn add(lhs: u32, rhs: u32) -> u32 {
lhs + rhs
}
dann Ihre Top-Level CMakeLists.txt könnte etwa so aussehen:
Wenn Sie bauen Das Rust-Ziel als staticlib
gibt aus, welche anderen Bibliotheken verknüpft werden sollen. Ich habe das nur unter Windows versucht, daher sind ws2_32
, userenv
und advapi32
verknüpft. Dies wird offensichtlich nicht plattformübergreifend sein, aber Sie können das leicht genug handhaben (z.B. eine Variable auf die Liste von Abhängigkeiten setzen, die für jede Plattform innerhalb eines if..else
Blocks geeignet sind, und diese an den Aufruf target_link_libraries
anhängen).
Beachten Sie auch, dass dies davon abhängt, dass Cargo im Pfad verfügbar ist.
Sie sollten jetzt gut gehen. Die Datei "CPP/main.cpp" könnte enthält so etwas wie:
#include <cstdint>
#include <iostream>
extern "C" {
uint32_t add(uint32_t lhs, uint32_t rhs);
}
int main() {
std::cout << "1300 + 14 == " << add(1300, 14) << '\n';
return 0;
}
Hier ist ein Link zu einem Arbeits example project.
Können Sie 'Fracht' verwenden? Wenn dem so ist, würde ich vorschlagen, Regeln zu haben, die Cargo anrufen. – Shepmaster