Notice: Rust-Empty is deprecated and replaced by Cargo, which comes with Rust
A Makefile to get started with Rust development.
MIT license (or just use it as you like).
Requires Linux or Mac OS X (with developer tools).
Experimental support for Mingw on Windows.
If you want to contact me, I often hang around in the #rust IRC channel (bvssvni)
It is recommended to install Cargo
Cargo will replace a subset of the features of Rust-Empty over time.
Example 1: Hello World
- Copy Makefile to a new empty project folder.
- Open the Terminal and navigate to the project folder.
make runto create and run "hello world"
The "hello world" example is created when there is no
Example 2: New open source library
- Create new repository on Github.
git clone <url>
Makefileto the folder.
DEFAULT = helpto
DEFAULT = lib
Example 3: Compile library on file changes
- Assuming you have set up the library and set the
make watchto generate the watch script
- Edit the source and save to do compilation
Example 4: Compile and run application on file changes
- Assuming you have set up the application properly
make watchto generate the watch script
./watch.sh src "make run"
- Edit the source and save to compile and run the application
This technique can be applied to running unit tests and benchmarks as well.
To chain commands, use the
&& operator, for example
./watch.sh src "make test-internal && bench-internal".
Example 5: Compile example with conditional compilation
- Assume you have an example 'examples/hello.rs'
#[cfg(foo)]in 'hello.rs' where you want want conditional compilation
make examples/hello.rs COMPILER_FLAGS+="--cfg foo"
The 'foo' part can be switched with any other flag.
You can also have multiple flags and require more than one by using
make examples/hello.rs COMPILER_FLAGS+="--cfg foo --cfg bar" to activate both.
What is Rust-Empty?
Rust-Empty is a user friendly Makefile/Bash setup tool for Rust programmers.
It automates setup of directories and configuration files.
Once setup is completed, replace or modify the Makefile to suit your needs.
The Makefile works out of the box on Linux and OSX (with developer tools).
The setup uses best practices and conventions learned from the Rust community.
Pull requests/fixes are welcome!
Latest feature: Build symlink dependencies!
What are these 'best practices'?
- Put code in a
- Add a
crate_idattribute for your library
- Deny missing doc attribute for library
.gitignoreto keep repository clean
- Library dependencies should be in
- Example programs better not be in the
- Need a
-Oflag to compile optimized code
- Dependencies, rust-nightly check through Travis CI etc.
- Work on Linux, Mac OS X and Mingw on Windows
- Convention by 'best practice' of Rust community
- Features are optional, non-interfering and gives informative output
- Integrate with other tools from Rust community
- Replace Cargo, the Rust package manager
- Backward compatibility
- Require any sort of internal configuration
- Create a new empty folder for your project.
- Copy 'Makefile' to the project folder.
- Open the Terminal window and navigate to the project folder.
- Type 'make help'.
--- rust-empty (0.7 000) make run - Runs executable make exe - Builds main executable make lib - Both static and dynamic library make rlib - Static library make dylib - Dynamic library make test - Tests library internally and externally make test-internal - Tests library internally make test-external - Tests library externally make bench - Benchmarks library internally and externally make bench-internal - Benchmarks library internally make bench-external - Benchmarks library externally make doc - Builds documentation for library make git-ignore - Setup files to be ignored by Git make examples - Builds examples make cargo-exe - Setup executable package make cargo-lib - Setup library package make rust-ci-lib - Setup Travis CI Rust library make rust-ci-exe - Setup Travis CI Rust executable make rusti - Setup 'rusti.sh' for interactive Rust make watch - Setup 'watch.sh' for compilation on save make loc - Count lines of code in src folder make nightly-install - Installs Rust nightly build make nightly-uninstall - Uninstalls Rust nightly build make clean - Deletes binaries and documentation. make clear-project - WARNING: Deletes project files except 'Makefile' make clear-git - WARNING: Deletes Git setup make symlink-build - Creates a script for building dependencies make symlink-info - Symlinked libraries dependency info make target-dir - Creates directory for current target
All the commands creates the files and folders necessary to compile.
For example, if you type
make exe it will add a hello-world program to
You can use
make clear-project to revert back to just the 'Makefile'.
Unit Testing & Benchmarking
Internal unit tests and benchmarks are located in the same source as the library,
External unit tests and benchmarks are located in
Linking to Libraries
target/deps/ is linked by default. If you put Rust libraries in this directory it will link statically if there is an ".rlib" file or dynamically if ".dylib" (OSX), ".so" (Linux) or ".dll" (Window).
A symlink is a file that points to another file. Symlinks are useful when working across multiple repositories and testing integration.
Using the command
ln -s <from> <to>, you can link the output file from another project to the
make symlink-info creates a file
.symlink-info that contains the file name, current commit, the remote origin url and which remote branches this commit is available. For more information about how to read '.symlink-info' files, see https://github.com/bvssvni/rust-empty/issues/114
ln -s <from> <to> for relative file names does not work on OSX. Use absolute file names instead. For example
ln -s /Users/myser/Desktop/mylibrary/target/x86_64-apple-darwin/lib/mylib.rlib target/x86_64-apple-darwin/mylib.rlib. See https://github.com/bvssvni/rust-empty/issues/100
make symlink-build creates a file
build.sh that can build projects by symlinks.
You can type
./build.sh to build just the project, or
./build.sh deps to build everything.
Introduction To Rust
Rust is a programming language developed at Mozilla Research.
For those new to terminal/Github:
Each night the latest version of Rust on Ubuntu is built against a list of projects.
Add project by following instructions on the site: