[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
user:zeman:mdmake [2010/11/05 15:28]
zeman
user:zeman:mdmake [2023/04/21 16:09]
zeman [Makefile]
Line 16: Line 16:
   * The respective variables with values of the respective dimensions must be normal variables containing only a list of words separated by spaces. MD-make will not search them for references to other variables or macros. If it encounters a dollar sign in these variables, it will throw an exception and terminate. These variables will be visible in the generated makefile as well.   * The respective variables with values of the respective dimensions must be normal variables containing only a list of words separated by spaces. MD-make will not search them for references to other variables or macros. If it encounters a dollar sign in these variables, it will throw an exception and terminate. These variables will be visible in the generated makefile as well.
   * No value in no dimension can be identical with any other value of any dimension. In other words, a value uniquely identifies its dimension. (This helps prevent ambiguities in file names that do not contain all dimensions.)   * No value in no dimension can be identical with any other value of any dimension. In other words, a value uniquely identifies its dimension. (This helps prevent ambiguities in file names that do not contain all dimensions.)
-  * There are special keywords to mark a multidimensional pattern rule. The following parameters can be supplied, too: +  * There are special keywords to mark a multidimensional rule: ''.MDRULE'', ''.MDALL'', ''.MDIN'' 
-    * In what dimensions the target file exists. (The other dimensions will not appear in the file name.)+  * ''.MDRULE'' introduces the main type of pattern rule. It has the parameter ''.md.rul'', which specifies the target and source states / file types (values of the last dimension). For example, we may state that the target file type ''mst.conll'' (a file parsed by the MST parser) needs source files of two types: ''blind.conll'' (the text to be parsed) and ''mst'' (the trained model for the MST parser). 
 + 
 +<code>.MDRULE 
 +.md.rul mst.conll < blind.conll mst</code> 
 + 
 +  * The following parameters can be supplied, too: 
 +    * The ''.md.for'' parameter specifies in what dimensions the target file exists. (The other dimensions will not appear in the file name.)
     * What are the constraints for the values in the respective dimensions. (Standard way is the ''.md.if'' directive but we would like to be able to constrain the ''.STATES'' dimension (or the last dimension in the list) directly in the rule.     * What are the constraints for the values in the respective dimensions. (Standard way is the ''.md.if'' directive but we would like to be able to constrain the ''.STATES'' dimension (or the last dimension in the list) directly in the rule.
     * MD-make will generate many normal rules from the multidimensional rule. In these generated rules, all combinations of all values in all affected dimensions will appear. As these rules are not templatic any more, we don't have to fear that gnu make will encounter cyclic dependencies or other problems.     * MD-make will generate many normal rules from the multidimensional rule. In these generated rules, all combinations of all values in all affected dimensions will appear. As these rules are not templatic any more, we don't have to fear that gnu make will encounter cyclic dependencies or other problems.
- +    New variables ''$(*1)'' (or other number instead of 1for n-th dependency) are available within the commands in the rule. MD-make finds the rule that creates this dependencyuses it to determine the set of dimensions of the dependencyconstructs the name of the file and replaces the variable by the file nameMD-make leaves intact ''$<'' and ''$^'' that will still work in the generated makefile. Howeverdon't use ''$*'' that does not make sense in MD-rules (unlike in normal pattern rules). 
-    Uvnitř příkazů lze použít nové proměnné ''$(*1)'', resp. místo jedničky jiné číslo, pro n-tou závislost. MD-make si najde pravidlokterým tato závislost vznikázjistí si z&nbsp;něj, v&nbsp;jakých rozměrech se pohybuje, a podle toho zkonstruuje jméno příslušného souboru, které na dané místo vložíBeze změny ponechá ''$<'' ''$^'', které budou fungovat samy od sebe, avšak pozor na ''$*'', které v&nbsp;MD pravidlech (na rozdíl od obyčejných šablonovitých pravidelnemá smysl+    * MD-rule ends obligatorily with an empty line (even at the end of the file). 
-    * MD pravidlo končí povinně prázdným řádkem (dokonce i na konci souboru). +    * If there is no parameter ''.md.for'' the rule is generated for all known dimensions except the last one (''STATES'' in our case). 
-    * Není-li uveden parametr ''.md.for'', pravidlo se rozgeneruje pro všechny známé rozměry kromě posledního (u nás ''STATES'', ale může se jmenovat i jinak). +    * The ''.md.fix'' parameter contains values that are fixed in this rulei.e. the rule is not generated for other values of the same dimensionSo far it is not allowed to include more values in one dimension (although in theory we may want to use it to constrain partial generation). 
-    * Parametr ''.md.fix'' obsahuje hodnotykteré jsou v&nbsp;tomto pravidle pevné, tjpravidlo se nerozgenerovává pro ostatní hodnoty téhož rozměruNení zatím dovoleno uvést více hodnot ve stejném rozměru (i když by to teoreticky mohlo sloužit k&nbsp;vymezení částečného rozgenerování). +    If ''.md.fix'' contains a dimension that at the same time appears in ''.md.for'', it means that the target type exists in this dimensionhas its value in its name/path but this particular rule generates this file only for one value of that dimension
-      Jestliže ''.md.fix'' obsahuje rozměr, který je současně uveden v&nbsp;''.md.for'', znamená tože cílový typ souboru se pohybuje v&nbsp;tomto rozměru, má jeho hodnotu uvedenou v&nbsp;cestě, akorát toto konkrétní pravidlo generuje tento soubor pouze pro jednu hodnotu v&nbsp;dotyčném rozměru+    If ''.md.fix'' contains a dimension that does not appear in ''.md.for'', it means that the target file type does not know this dimension and does not have it in its name/path but one of the source files knows the dimension and needs to know what value ve have on mindWe can figure out from the rules generating the source files what dimensions they exist in
-      Jestliže ''.md.fix'' obsahuje rozměr, který není současně uveden v&nbsp;''.md.for'', znamená to, že cílový typ souboru tento rozměr nezná a nemá ho uveden v&nbsp;cestě, avšak některý ze zdrojových souborů tento rozměr má a potřebuje vědět, kterou hodnotu máme na mysliKteré ze zdrojových souborů hodnotu ''.md.fix'' využijí, poznáme z&nbsp;pravidel, která tyto soubory generují jako cílové a vymezují jejich rozměry+    If a source file requires a dimension not contained in the target fileand the dimension is not fixedthe rule will be generated for all values of this dimensionThis means that there will be several competing rules for the same target file
-      Jestliže některý zdrojový soubor vyžaduje rozměrkterý cílový soubor neobsahujea tento rozměr není zafixován, pravidlo se rozgeneruje i pro všechny hodnoty tohoto rozměruBude pak existovat několik konkurenčních pravidel, která vytvářejí tentýž cílový soubor+    * ''.md.del'' removes dimensions from ''.md.for'' (handy if ''.md.for'' is not explicitly stated and contains all dimensions by default
-    * ''.md.del'' odstraní rozměry z&nbsp;''.md.for'' (nejvíce se hodí, když ''.md.for'' není uvedeno a defaultně tedy obsahuje všechny rozměry+    * ''.md.fxd'' combines ''.md.fix'' and ''.md.del''Contains valuesnot dimensions (like ''.md.fix'' and unlike ''.md.del''
-    * ''.md.fxd'' je jako ''.md.fix'' ''.md.del'' dohromadyUvádějí se hodnotynikoli názvy rozměrů (tedy jako u ''.md.fix'' a na rozdíl od ''.md.del''+    * If a command in a rule refers a dimension (e.g. ''$(*LANGUAGES)''the reference will be converted to the actual value of the dimensionIf different source files have different values of the same dimension within one generated rule the reference will be replaced by the value that the target file takes in this dimension (i.eby the variable value)Anyway the purpose of such references is to refer to the variable dimensions. Modified values of particular source files are fixed exceptionswe know them in advance and can write them to the command directly, if necessary.
-    * Odkaz na hodnotu rozměru z&nbsp;příkazu (např. ''$(*LANGUAGES)''se převede na aktuální hodnotu daného rozměruPokud mohou mít různé zdrojové soubory různé hodnoty téhož rozměru v&nbsp;rámci jednoho vygenerovaného pravidla, odkaz se převede na hodnotu, které v&nbsp;tomto rozměru nabývá cílový soubor, respkterá je proměnnáOdkazy tohoto druhu byly stejně zavedeny kvůli proměnným rozměrůmOdlišné hodnoty u konkrétních zdrojových souborů jsou fixní výjimkytyto hodnoty známe předem a v&nbsp;případě potřeby je můžeme do příkazu zapsat přímo.+
  
 <code>.MDRULE <code>.MDRULE
Line 40: Line 45:
         $(TOOLDIR)/runmst.pl -m $(*2) < $< > $@</code>         $(TOOLDIR)/runmst.pl -m $(*2) < $< > $@</code>
  
-  * Je možné definovat vstupní souboryTy typicky leží úplně v&nbsp;jiné cestě, nebo se alespoň jmenují tak, aby se nepletly se soubory pojmenovanými pomocí hodnot rozměrů, nehrozilo tudíž jejich smazání makemMůžeme popsat jejich vlastnosti v&nbsp;jednotlivých rozměrech prostě tak, že vytvoříme obyčejné pravidlo, kde dotyčný vstupní soubor bude jako závislost, zatímco cíl bude soubor pojmenovaný příslušnými hodnotami rozměrůPřed pravidlo připíšeme ''.md.in:''. MD-make pak doplní příkaz pro zkopírování závislosti do cíle (''cp $< $@'') a navíc zkontroluje, že cílový soubor má hodnoty všech rozměrů, které soubor v&nbsp;daném stavu (hodnota posledního rozměrumá mít+  * It is possible to define input filesThese are typically in completely different folder or they names are different so that they are not confused with the files named according to dimension values and they are not in danger of being removed by makeWe can describe their properties in various dimensions if we create a normal rule where the input file is a dependency (source) and the goal is a file named by dimension valuesWe write ''.md.in:'' before such rule. MD-make adds a command to copy the source file to the target (''cp $< $@''and checks that the target file has values for all dimensions that file in its state (last dimension's valueought to have
-  * Vygenerovaný makefile by navíc mohl obsahovat pro každou hodnotu každého rozměru seznam souborů, v&nbsp;nichž je tato hodnota zafixovanáNapř. všechny cílové soubory v&nbsp;jazyce "hi"Kromě proměnné obsahující jména těchto souborů (HIFILES) by vygenerovaný makefile obsahoval cíl, který všechny tyto soubory vyrobí (hi)cíl, který je smaže (clean_hi). +  * The generated makefile could further contain for each value of each dimension the list of files for which this value is fixedFor instance, all target files in the language "hi"Besides the variable containing names of such files (HIFILES) there would also be a goal that creates/updates all such files (hi) and goal that removes them (clean_hi). 
-  * V&nbsp;průběhu generování vícerozměrných pravidel si pamatovat seznam všech vygenerovaných cílových souborůKe každému cílovému souboru vytvořit hash, jehož klíčem je hodnota libovolného rozměru hodnota u daného klíče je nenulová, jestliže příslušná hodnota rozměru je v&nbsp;názvu souboru obsaženaNa konci makefilu lze použít pravidlo ''.MDALL'', které vytvoří ''.PHONY'' cíl závisející na všech souborech obsahujících určité hodnotyNapř.+  * Collect names of all generated target files during generating of the multidimensional rulesCreate a hash for every target file where the key is the value in dimension and the value under that key is non-zero if the value of the dimension is contained in the name of the fileAt the end of the makefile there can be a rule ''.MDALL'' that creates a ''.PHONY'' goal depending on all files containing given values. E.g.
  
 <code>.MDALL: d hi conll</code> <code>.MDALL: d hi conll</code>
  
-se přepíše jako+would be rewritten as
  
 <code>.PHONY: all_d_hi_conll <code>.PHONY: all_d_hi_conll
-all_d_hi_conll: <seznam všech souborů obsahujících hodnoty "d", "hi" "conll"></code>+all_d_hi_conll: <list of all files containing values "d", "hi" and "conll"></code> 
 + 
 +===== Download ===== 
 + 
 +Copyright © 2009 Daniel Zeman 
 + 
 +All software supplied with this package is released under the GNU 
 +General Public License.  This program is free software; you can 
 +redistribute it and/or modify it under the terms of the GNU General 
 +Public License as published by the Free Software Foundation; either 
 +version 2, or (at your option) any later version. 
 + 
 +This program is distributed in the hope that it will be useful, 
 +but WITHOUT ANY WARRANTY; without even the implied warranty of 
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 +GNU General Public License (below or at http://www.gnu.org/licenses/ 
 +gpl.html) for more details. 
 + 
 +{{:user:zeman:mdmake.zip|mdmake.zip}} contains the script ''mdmake.pl'' (you need a Perl interpreter to use it), a sample multidimensional makefile and the normal makefile generated from it. 
 + 
 +===== Acknowledgements ===== 
 + 
 +This research has been supported by the grant of the Czech Ministry of Education no. MSM0021620838. 

[ Back to the navigation ] [ Back to the content ]