Please integrate build framework into the compiler
davidl
davidl at 126.com
Sat Mar 21 18:50:13 PDT 2009
在 Sun, 22 Mar 2009 04:19:31 +0800,grauzone <none at example.net> 写道:
> I don't really understand what you mean. But if you want the compiler to
> scan for dependencies, I fully agree.
>
> I claim that we don't even need incremental compilation. It would be
> better if the compiler would scan for dependencies, and if a source file
> has changed, recompile the whole project in one go. This would be simple
> and efficient.
>
This may not be true. Consider the dwt lib case, once you tweaked a module
very little(that means you do not modify any interface connects with
outside modules and code that could possible affect modules in the same
packages), the optimal way is
dmd -c your_tweaked_module
link all_obj
That's much faster than regenerating all other object files. Yes, feed
them all to DMD compiles really fast. Writing all object files to disk
costs much time. And your impression of incremental compilation seems to
be misguided by the rebuild and dsss system. Rebuild takes no advantage of
di files, thus it have to recompile everytime even in the situation that
the module based on all other di files unchanged. I posted several
blocking header generation bugs in DMD and with fixes. Just so little
change that dmd can generate almost all header files correctly. I tested
tango, dwt, dwt-addons. Those projects are very big and some take advanced
use of templates. So the header generation building strategy is really not
far away.
Little self-promotion here, and in case Walter misses some of them:
http://d.puremagic.com/issues/show_bug.cgi?id=2744
http://d.puremagic.com/issues/show_bug.cgi?id=2745
http://d.puremagic.com/issues/show_bug.cgi?id=2747
http://d.puremagic.com/issues/show_bug.cgi?id=2748
http://d.puremagic.com/issues/show_bug.cgi?id=2751
In c++, a sophisticated makefile carefully build .h dependencies of .c
files. Thus, once .h files are updated, then .c files which are based on
them need to be recompile. This detection can be made by comparison of old
.di files and new .di files by testing their equality.
More information about the Digitalmars-d
mailing list