[ 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
user:zeman:rizeni-pokusu-pomoci-makefilu [2009/11/25 15:16]
zeman .md.del a .md.fxd
user:zeman:rizeni-pokusu-pomoci-makefilu [2023/04/21 15:57] (current)
zeman [mdmake]
Line 56: Line 56:
   * Velikost trénovacích dat pro křivku učení   * Velikost trénovacích dat pro křivku učení
   * Různá nastavení parseru a dalších nástrojů, různá předzpracování dat (např. převedení morfologických značek do sady PDT)   * Různá nastavení parseru a dalších nástrojů, různá předzpracování dat (např. převedení morfologických značek do sady PDT)
 +
  
 ===== mdmake ===== ===== mdmake =====
Line 69: Line 70:
   * Žádná hodnota v žádném rozměru nesmí být totožná s nějakou hodnotou v jiném rozměru. Jinými slovy, máme-li hodnotu, můžeme z ní poznat i rozměr. (Tím se mimo jiné předchází nejednoznačnostem ve jménech souborů, která neobsahují všechny rozměry.)   * Žádná hodnota v žádném rozměru nesmí být totožná s nějakou hodnotou v jiném rozměru. Jinými slovy, máme-li hodnotu, můžeme z ní poznat i rozměr. (Tím se mimo jiné předchází nejednoznačnostem ve jménech souborů, která neobsahují všechny rozměry.)
   * Multidimenzionální šablonovité pravidlo lze označit jako takové a říct pro něj:   * Multidimenzionální šablonovité pravidlo lze označit jako takové a říct pro něj:
-    * Ve kterých rozměrech se pohybuje cílový soubor. (Ostatní rozměry se ve jménu souboru vůbec neobjeví.)+    * Ve kterých rozměrech se pohybuje cílový soubor: direktiva ''.md.for''. (Ostatní rozměry se ve jménu souboru vůbec neobjeví.)
     * Jaké jsou podmínky na hodnoty v jednotlivých rozměrech. (Standardně pomocí direktivy ''.md.if'', ale nějak zařídit, aby se podmínka pro rozměr ''.STATES'' (resp. poslední rozměr v seznamu) mohla defaultně vyjádřit přímo v pravidle.     * Jaké jsou podmínky na hodnoty v jednotlivých rozměrech. (Standardně pomocí direktivy ''.md.if'', ale nějak zařídit, aby se podmínka pro rozměr ''.STATES'' (resp. poslední rozměr v seznamu) mohla defaultně vyjádřit přímo v pravidle.
     * MD-make rozgeneruje multidimenzionální pravidlo na řadu obyčejných pravidel, ve kterých se vystřídají všechny kombinace hodnot ve všech zúčastněných rozměrech. Tato pravidla už nejsou šablonovitá, takže nehrozí, že gnu make potom narazí na cyklické závislosti nebo jiné problémy.     * MD-make rozgeneruje multidimenzionální pravidlo na řadu obyčejných pravidel, ve kterých se vystřídají všechny kombinace hodnot ve všech zúčastněných rozměrech. Tato pravidla už nejsou šablonovitá, takže nehrozí, že gnu make potom narazí na cyklické závislosti nebo jiné problémy.
Line 81: Line 82:
     * ''.md.del'' odstraní rozměry z ''.md.for'' (nejvíce se hodí, když ''.md.for'' není uvedeno a defaultně tedy obsahuje všechny rozměry)     * ''.md.del'' odstraní rozměry z ''.md.for'' (nejvíce se hodí, když ''.md.for'' není uvedeno a defaultně tedy obsahuje všechny rozměry)
     * ''.md.fxd'' je jako ''.md.fix'' a ''.md.del'' dohromady. Uvádějí se hodnoty, nikoli názvy rozměrů (tedy jako u ''.md.fix'' a na rozdíl od ''.md.del'')     * ''.md.fxd'' je jako ''.md.fix'' a ''.md.del'' dohromady. Uvádějí se hodnoty, nikoli názvy rozměrů (tedy jako u ''.md.fix'' a na rozdíl od ''.md.del'')
 +    * Odkaz na hodnotu rozměru z příkazu (např. ''$(*LANGUAGES)'') se převede na aktuální hodnotu daného rozměru. Pokud mohou mít různé zdrojové soubory různé hodnoty téhož rozměru v rámci jednoho vygenerovaného pravidla, odkaz se převede na hodnotu, které v tomto rozměru nabývá cílový soubor, resp. která je proměnná. Odkazy tohoto druhu byly stejně zavedeny kvůli proměnným rozměrům. Odlišné hodnoty u konkrétních zdrojových souborů jsou fixní výjimky, tyto hodnoty známe předem a v případě potřeby je můžeme do příkazu zapsat přímo.
  
 <code>.MDRULE <code>.MDRULE
Line 92: Line 94:
   * Je možné definovat vstupní soubory. Ty typicky leží úplně v&nbsp;jiné cestě, nebo se alespoň jmenují tak, aby se nepletly se soubory pojmenovanými pomocí hodnot rozměrů, a nehrozilo tudíž jejich smazání makem. Můž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ěru) má mít.   * Je možné definovat vstupní soubory. Ty typicky leží úplně v&nbsp;jiné cestě, nebo se alespoň jmenují tak, aby se nepletly se soubory pojmenovanými pomocí hodnot rozměrů, a nehrozilo tudíž jejich smazání makem. Můž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ěru) má mít.
   * 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), a cíl, který je smaže (clean_hi).   * 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), a cíl, který je smaže (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 a hodnota u daného klíče je nenulová, jestliže příslušná hodnota rozměru je v&nbsp;názvu souboru obsažena. Na konci makefilu lze použít pravidlo ''.MDALL'', které vytvoří ''.PHONY'' cíl závisející na všech souborech obsahujících určité hodnoty. Např.
 +
 +<code>.MDALL: d hi conll</code>
 +
 +se přepíše jako
 +
 +<code>.PHONY: all_d_hi_conll
 +all_d_hi_conll: <seznam všech souborů obsahujících hodnoty "d", "hi" a "conll"></code>
  
 Pozor! Podporu pro odesílání cílů na cluster, plánovanou níže, psát nemusím! Existuje totiž ''qmake'', který si poradí s&nbsp;normálním makefilem pro GNU make a sám rozesílá úlohy na cluster. Jediný podstatný rozdíl, na který je třeba dát pozor, je, že pravidlo nesmí obsahovat několik příkazů na samostatných řádcích. Pokud má obsahovat více než jeden příkaz, musejí být všechny na jednom řádku oddělené středníky a před případnými zalomeními řádku musí být backslash. Pozor! Podporu pro odesílání cílů na cluster, plánovanou níže, psát nemusím! Existuje totiž ''qmake'', který si poradí s&nbsp;normálním makefilem pro GNU make a sám rozesílá úlohy na cluster. Jediný podstatný rozdíl, na který je třeba dát pozor, je, že pravidlo nesmí obsahovat několik příkazů na samostatných řádcích. Pokud má obsahovat více než jeden příkaz, musejí být všechny na jednom řádku oddělené středníky a před případnými zalomeními řádku musí být backslash.

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