X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=README;h=0b95b98ff17f75152a7279503bc8139c56f86471;hb=ea45444f2cdeb2543e25b53f760c89dbf060f87c;hp=f481157e315c3c3c09babbccfec9805edd78e4e1;hpb=6cf829ff0dd68b88bfb56a0b7ff8020023aedf57;p=subdirmk.git diff --git a/README b/README index f481157..0b95b98 100644 --- a/README +++ b/README @@ -138,6 +138,35 @@ If you `include subdirmk/regen.mk', dependency management and automatic regeneration for all of this template substitution, and for config.status etc. is done for you. +Summary of directory reference syntaxes +--------------------------------------- + +Path construction &-expansions, meanings summary: + + In build tree In source tree + This directory just & &, + Top level &. implies absolute &; + +Adding `@' means "absolute path". This is not needed with &. because +there is never any need to use &. since it would expand to nothing. +`/' terminates the escape (needed if the next thing is not a lowercase +character, or space). `=' means "just the value, no /". Space starts +multi-word processing. + + Recommended In build tree In source tree + when Relative Absolute Relative Absolute + + This lc &file &@file &,file &@,file + directory any &/file &@/file &,/file &@,/file + several & f g h &@ f g h &, f g h &^, f g h + + Top lc &.file &;file &@;file + level any file &./file &;/file &@;/file + .mk.in file $(abs)/file $(src)/file $(abs_src)/file + several f g h &. f g h &; f g h &@; f g h + &@. file + &@. f g h + Substitution syntax ------------------- @@ -169,6 +198,11 @@ empty string). &^ => $(top_srcdir)/sub/dir or $(top_srcdir) &~ => $(abs_top_srcdir)/sub/dir or $(abs_top_srcdir) +In general: + ^ filenames in source tree rather than build tree + ~ filenames are absolute rather than relative + @ filenames do not contain subdir (useful with the above) + && => && for convenience in shell runes \& => & general escaping mechanism @@ -282,7 +316,10 @@ You can convert your project incrementally. Start with the top-level Makefile.in and rename it to Subdir.sd.mk, and add the appropriate stuff to configure.ac, and fix everything up. Leave the existing $(MAKE) -C for your existing subdirectories alone. Then you can -convert individual subdirectories, or classes of subdirectories. +convert individual subdirectories, or classes of subdirectories, at +your leisure. (You must be /sure/ that each subdirectory will be +entered only once at a time, but your existing recursive make descent +system should already do that or you already have concurrency bugs.) Aside from this, be very wary of any invocation of $(MAKE) anywhere. This is a frequent source of concurrency bugs in recursive make build