All Projects → breily → Ruby2make

breily / Ruby2make

A DSL to write Makefiles in Ruby

Programming Languages

c
50402 projects - #5 most used programming language

+^+ Ruby2Make +^+

  • Goal: Ruby DSL to generate Makefiles

  • Simple example: to make this Makefile,

    CC = gcc FLAGS = -g

    hello: hello.c $(CC) $(FLAGS) hello.c -o hello

    clean: -rm hello -rm *.o

use this Ruby:

vars :FLAGS => "-g"

rule "hello", :depends => "hello.c" do
    compile :output => "hello"
end

clean "hello", "*.o"

It's more readable, and it doesn't insanely require tabs and not spaces.

-=- Usage -=-

  • To install in /usr/bin, do ruby setup.rb as root.

  • To use, rbmake looks for a Makefile.rb and generates a Makefile.

  • To specify a Makefile.rb, use rbmake other_file.rb.

-=- Examples -=-

  • A number of usage examples are included, they would be the best way to learn the syntax.

-=- Syntax -=-

vars [hash] => Set Makefile macros (includes {:CC => "gcc", :FLAGS => ""})

suffix [out extension] [in extension] [command] => Add a rule to compile files from the inextension to the out extension, currently using a literal compilation command. See example5.rb.

rule [name] [optional depends hash] [block] => Add a rule/target called name. If a hash like ':depends => "hello.o"' or ':depend => ["hello.o", "hello.h"]' is present, then those items are added as dependencies to the rule.

depends [args] => Add dependencies to a rule (must occure in rule declaration's block)

compile [args] => Without any args, uses '$(CC) $(FLAGS)' to compile the dependencies.

   Parameters accepted:
     :input, :i         => Specify input file(s)
     :output, :o        => Specify output file
     :compiler, :c      => Specify a compiler other than $(CC)
     :to_obj, :obj      => Add a "-c" flag
     :to_asm, :asm      => Add a "-S" flag
     :debug             => Add a "-g" flag
     :[email protected]                => Sets the output file to "[email protected]" (name of the rule)

   Literal arguments are also accepted.  Strings are directly inserted, and
   symbols are converted to macros. :LIBS becomes $(LIBS).

shell [args] => Add a custom line/command to a rule. Modifiers allowed: :silent => Add a '@' to command (Make won't echo it when it executes) :suppress => Add a '-' to command (Make won't worry about errors)

echo [message] => Shortcut for an often used command: shell "@echo #{message}"

clean [files] => Shortcut to create a clean rule, with a '-rm -rf' command for all file arguments given.

comment [comments] => When used outside a rule, adds the comment at the beginning of the Makefile. When used inside a rule, adds the comments directly above the rule (see example 1).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].