(Posting this here as I think it might be useful for some but I don't
feel like getting a Reddit account and there's no rust-announce).
I've been experimenting with building Rust crates using some established
build systems, focusing on SCons and CMake due to their popularity.
Neither turned out to be a perfect fit for Rust, but CMake was
marginally less bad so I chose it in the end. To that end I created some
CMake modules that make that integration be as painless as possible.
Here's what a minimal CMakeLists.txt would look like for a single
library crate project:
~~~
cmake_minimum_required(VERSION 2.8)
project(testlib NONE)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
find_package(rustc)
find_package(rustdoc)
include(Rust)
set(RUSTC_FLAGS "-L${CMAKE_BINARY_DIR}/lib")
rust_crate_auto(src/lib.rs TARGET_NAME TESTLIB)
add_custom_target(library_target
ALL
DEPENDS ${TESTLIB_FULL_TARGET})
install(FILES ${TESTLIB_ARTIFACTS}
DESTINATION lib)
~~~
And then you'd do the usual out-of-source build. It will reconfigure the
build system if any of the files referenced by src/lib.rs (as reported
by rustc --dep-info) get changed. A more complete example that shows
building several inter-dependent crates, documentation and tests can be
seen here: https://github.com/SiegeLord/RustCMake . The modules for this
to work are also found there.
Caveats: CMake doesn't know what Rust is, so it has to reconfigure the
entire build system whenever you change any of the source files needed
for *ANY* crate in your project (it doesn't need to do that with C/C++
because it has an internal dependency scanner). This won't be a big deal
in small projects, and I find the convenience of using CMake to be worth
it, but it does suggest that CMake is not the ultimate solution to
building Rust projects.
-SL
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev