[Omake] Recursive invocation of omake
Benjamin Pierce
bcpierce at cis.upenn.edu
Thu Jun 8 09:42:59 PDT 2006
> Jason, should I may be add this information into the "Scoping
> for .PHONY Targets" section? Or perhaps right after it?
I'd suggest creating a whole new manpage / chapter of the docs,
called something like Multi-Directory Projects. You could also move
the vmount stuff there.
- B
>
>> On Jun 7, 2006, at 2:24 PM, Aleksey Nogin wrote:
>>> On 07.06.2006 07:34, Benjamin Pierce wrote:
>>>
>>>> Looking at the OMakefiles for OMake itself, I discovered that
>>>> if both the root OMakefile and some subdirectory's OMakefile
>>>> contain clean: targets, then
>>>> 1) doing 'make clean' in the root dir will execute them both
>>>> (in the appropriate directories)
>>>> 2) doing 'make clean' in the subdirectory will execute just
>>>> its local one.
>>>> This is exactly the behavior I wanted, so that problem is solved.
>>>> However, this makes me realize that there is still quite a bit
>>>> I don't understand about OMake's view of a multi-directory
>>>> project -- I don't have a model that would have allowed me to
>>>> predict both (1) and (2). Can someone explain?
>>>
>>>
>>> Let me first quickly explain the semantics for the non-phony
>>> targets. There, running "omake foo" asks OMake to build the file
>>> foo in context of the _whole_ project. Therefore, if bar/baz is
>>> a regular file, then running "omake bar/baz" and running "(cd
>>> bar; omake baz)" are equivalent (unless bar/OMakeroot exists,
>>> designating bar as a completely separate project, which should
>>> not normally happen).
>>>
>>> Now on to phony targets. When the the "root" OMakefile has a
>>> directive ".PHONY: clean", it creates a "clean" phony target
>>> relative to the project root - let's call it ".PHONY/clean". All
>>> the "clean: ..." rules in the "root" OMakefile following this
>>> ".PHONY: clean" declaration would be interpreted as rules for
>>> the ".PHONY/clean" target.
>>>
>>> Now when OMake then comes across the ".SUBDIRS: doc" directive
>>> (when it is in scope of the above ".PHONY: clean" declaration),
>>> it does the following:
>>>
>>> a) Creates the ".PHONY/doc/clean" phony target
>>>
>>> b) Creates the rule
>>> .PHONY/clean: .PHONY/doc/clean
>>>
>>> c) Reads the doc/OMakefile file, interpreting its instructions
>>> relative to the doc directory. In particular, all the
>>> "clean: ..." rules in the doc/OMakefile will be taken to apply
>>> to ".PHONY/doc/ clean".
>>>
>>> Now when you run "omake clean" in the root directory of the
>>> project, it is interpreted as "omake .PHONY/clean", so both the
>>> rules for ".PHONY/clean" are executed and the rule for its
>>> dependency ".PHONY/doc/clean". Running "(cd doc; omake clean)"
>>> is, as for normal targets, equivalent to running "omake .PHONY/
>>> doc/ clean" and only those rules that apply to ".PHONY/doc/clean"
>>> will be executed.
>>>
>>> Hope this helps.
>>>
>
>
> --
> Aleksey Nogin
>
> Home Page: http://nogin.org/
> E-Mail: nogin at cs.caltech.edu (office), aleksey at nogin.org (personal)
> Office: Moore 04, tel: (626) 395-2200
> _______________________________________________
> Omake mailing list
> Omake at metaprl.org
> https://lists.metaprl.org/mailman/listinfo/omake
More information about the Omake
mailing list