![]() |
OMake Home Documentation Download Publications Mailing lists Users and projects Bugzilla Browse sources Changelog summary, verbose |
Jump to version 0.9.8.1, 0.9.8, 0.9.6.9, 0.9.6.8, 0.9.6.7, 0.9.6.6, 0.9.6.5, 0.9.6, 0.9.4, 0.9.3, 0.9.2.
See also the brief summary change log.
Value dependencies are specified using the :value: option in rules.
a: b c :value: $(X) ...
This rule specifies that "a" should be recompiled if the value of $(X) changes (X does not have to be a filename). This is intended to allow greater control over dependencies. In addition, it can be used in place of other kinds of dependencies. For example, the following rule:
a: b :exists: c commandsis the same as
a: b :value: $(target-exists c) commands
Notes:
One other significant difference is that the rule cache now uses a digest of the rule commands text, not the text itself. This has an impact on initial omake speed (I am not sure how significant it is) but the cache is smaller. Also, "section eval" should now be handled correctly.
Externally, a .SCANNER rule has the usual rule form:
.SCANNER: target: dependencies... ...scanner commands...
However, the scanner target is now decoupled from the build target, allowing a scanner result to be used for multiple build targets. For example, ocamldep produces dependencies for .cmo and .cmx files simultaneously. They can share the scanner rule by specifying an explicit :scanner: dependency.
.SCANNER: scan-ocaml-%.ml: %.ml ocamldep $lt; %.cmo: %.ml :scanner: scan-ocaml-%.ml $(OCAMLC) ... %.cmx %.o: %.ml :scanner: scan-ocaml-%.ml $(OCAMLOPT) ...
The current convention is that scanner targets should be named scan-<language>-<source-file>.
.SCANNER: foo: echo "foo: boo" foo: :scanner: foo ...
See documentation for the Target object and the "Examining the dependency graph" Section of the OMake Documentation for more information.
.SUBDIRS: foo boo println(Current directory is $(CWD)) ...normal configuration...
vmount(-l, src, x86) .SUBDIRS: x86
Files from the src directory are now automatically linked into the x86 directory as needed. If you want to have multiple versions, you can use multiple directories (and multiple vmounts).
The keys are now "simple" values, not just strings. Simple values include integers, floats, strings, arrays of simple values, files, and directories.
Only the Map class has the map functions defined. If you want to have, say, a File that also includes a Map, create a subclass that extends both File and Map.
Literal string keys can be written in the form $|key...|. This works both for definitions and uses. The usual modifiers are allowed $,|key| and $`|key|.
X. = extends $(Map) $|key 1| = 1 $|key 2| = $|key 1| boo $|key 2| += foo