Smart: A Modern Make Utility for Modular Projects

Smart is a contemporary make utility that is developed using the Golang programming language. It boasts of being a more potent, versatile, and user-friendly tool compared to the GNU Make for modular projects. Smart is equipped with a wide range of features that are not present in the GNU Make, including:

  • Multiple project-based build targets
  • Arbitrary modular projects and use mechanism
  • Dependency tracking and automatic command-flags accumulation
  • Source-level debug, self-diagnostics and self-tracing
  • Customizable and callable build rules
  • Different dialects to perform a build with more than shell commands
  • Makefile-like syntax with many differences and additions
  • Builtin configuration without autoconf utility
  • Support for multiple programming languages
  • Parallel builds (planned)
  • Specific Emacs editing mode: smart-mode.el

Smart is specifically created to enhance the efficiency of complex projects with interdependent processes, surpassing even the capabilities of GNU Make. It employs several techniques to hasten project completion, like caching intermediate results and implementing parallel builds (in the works).

Example Smart build file

project foobar (app)

# Declare project dependency
use (
    libxml
)

# Declare source and output files
files (
    (*.cpp) => $//src
    (foobar) => $(outbin)
)

# Append values for general gcc/clang flags
-D += TAG=example
-O += g

# Build foobar as a executable program
foobar : program

Author's Note

Initially, I made my project, Smart, available as an open-source project on GitHub, but it is now private. I am constantly improving its features and plan to incorporate it into my commercial product in the future. The possibility of reopening the source code depends on the progress and development of my business model. I apologize for any inconvenience this may have caused, but I need to make a living. I hope you understand my situation.

Contact

If you are considering using Smart, kindly reach out to me. I would be delighted to provide you with a demonstration and talk about pricing.