[Omake] Recursive invocation of omake

Aleksey Nogin nogin at cs.caltech.edu
Thu Jun 8 08:24:27 PDT 2006


On 07.06.2006 17:34, Benjamin Pierce wrote:

> Many thanks for that, Aleksey -- what you wrote about how phony  targets 
> work is precisely what I was missing!

You are welcome!

> Would be great if this stuff got into the documentation someplace...

Jason, should I may be add this information into the "Scoping for .PHONY 
Targets" section? Or perhaps right after it?

> 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


More information about the Omake mailing list