Some people complain that make doesn't have enough flexibility to suit their
needs.  My main complaint about it is that it requires a tab at the beginning
of the lines that contain commands; if you type a space instead, the makefile
doesn't work.  You can't see this error by looking at the file.  This is
abysmally stupid; make should accept any whitespace at the beginning of the
line, not just tabs.  Recent versions of make seem to kludge in additional
functionality, trying to somehow fit it in to the existing makefile syntax,
e.g.  phony targets specified with ".PHONY" in GNU make.

Ant is sometimes lauded as a superior alternative, but it has also been
criticized as being even more primitive than make, being too Java-oriented,
and having a clumsy XML syntax.  I have not used it much, but I don't see any
strong advantages over make.

When I look at a dependency line and its associated command lines in a
makefile, they remind me of a function definition, with the target name in
place of the function name, the dependencies in place of arguments, and the
commands in place of the function body.  This suggests that one approach to
creating a better build tool might be to create a true programming language
for defining builds, supporting dependency block structures something like

target 
  my_module.o
dependencies
  my_module.c my_module.h
begin
  shell "cc -c " target[0] " " dependency[0];
end

as well as the control structures and function definition features found in
most programming languages.  This would provide automated dependency
resolution combined with standard programming language capabilities.  That
should be flexible enough to handle pretty much any imaginable build task,
while having a clean syntax not dependent on beginning-of-line whitespace,
phony targets, or other such nonsense.

--- Brian


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to