|
On 03/08/2013 08:08 AM, Spencer Parkin wrote:
Admittedly, my knowledge of build systems is limited, but I can already tell you that for as long as I've been working with them, (which has been as long as I've been programming, (which is a fairly long time.)), that I really, really hate build systems. Let's start with dev-studio and its property pages. Yuck. Need I say more? Next, the make utility. After a great deal of effort, I finally created a make-file for one of my static library projects. Here's a snippet... define BUILD_OBJ_RULE = $(1): $(2) $$(CPP) $$(FLAGS) -c $$< -o $$@ endef $(foreach src, $(SRCS), $(eval $(call BUILD_OBJ_RULE, $(patsubst %.cpp, $(BUILD)/%.o, $(notdir $(src))), $(src)))) Yikes! Yes, it's ugly and LISPY, but it's also probably embarassing, since no real programmer that actually knew what they were doing would write that. Moving on!
People only write their own makefiles if their project is really simple, or if they really really really have to. In any other scenario, which is the case when people actually need to get stuff done, they employ automatic build systems, which include makefile generators.
I would suggest that instead of wasting time reinventing the wheel without any added value planned, you gave, for example, cmake a try. By looking at your complains, it sounds like it covers every single one of them. Well, except that it isn't Lua. But is this really relevant?
So here's a bit of brain storming. How about a build system broken down into two parts. (I'm not claiming any originality here. This may sound a bit like jam.) 1) Dependency graph generation, and 2) Dependency graph execution.
That's what make is for, which is the reason make is a standardized utility (IEEE standard and all) and why a bunch of automatic build systems end up generating makefiles.