Autor Téma: Direktiva  (Přečteno 2372 krát)

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Direktiva
« kdy: 13-07-2012, 12:24:29 »
Nevíte, jestli lze v projektu *.DPR definovat direktivu, kterou bych mohl v Unitě testovat?

Jde mi o to, aby se dva různé projekty kompilovali ve společných Unitách jinak. Nechci tam ale nic includovat.

Dík

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Direktiva
« Odpověď #1 kdy: 13-07-2012, 12:30:28 »
jeslti chces globalni direktivu, tak Project - Options - Directories/Conditionals - Conditionals ... a rebuild ;)

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:Direktiva
« Odpověď #2 kdy: 13-07-2012, 13:54:22 »
Osobně preferuju mít na začátku každého souboru v projektu
Kód: Delphi [Vybrat]
  1. {$INCLUDE 'projekt.inc'}
a pak ty direktivy a jejich závislosti nastavovat v tom souboru (protože, a to přes Project Options pohodlně neudělám), některé direktivy mohou být platné např. jen pro určité verze Delphi nebo jen pro ladící režim nebo jen pro Win64 atd.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1065
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Direktiva
« Odpověď #3 kdy: 13-07-2012, 14:51:55 »
Rád bych upozornil, že v případě podmíněných výrazů uvedených v dpr souboru (ale i dpk) může dojít k jejich odstranění při změně parametrů projektu z IDE. Týká se to jak sekcí uses tak i podmínek v nastavení.
Lze to řešit buď dvěma verzemi statického dpr souboru v různých adresářích stejené úrovně nebo read-only souborem (ale to není v některých případech vhodné).
Pokud nechcete nic includovat, pak musíte podmínky vypsat v každé unitě extra. Ale je to dost pracné, a někdy se tím vnáší i chyby...

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:Direktiva
« Odpověď #4 kdy: 15-07-2012, 16:47:22 »
jeslti chces globalni direktivu, tak Project - Options - Directories/Conditionals - Conditionals ... a rebuild ;)

Tohle by bylo řešení, kdyby to fungovalo. {$IFDEF XXX} to přeskočí, jako by direktiva neexistovala.
Mám Unitu ve zvláštní Adresáři pro společné unity. Totu unitu bych chtěl překompilovat pro dva různé projekty trochu jinak.
Napadlo mě, do Unity vložit {$INCLUDE MyProject.inc} a tento soubor vložit do adresáře projektu. Budete se divit, ale funguje to. Ovšem s tím, že pokaždé, když tuto unitu použiji, musím tam mít ten soubor.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1174
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Direktiva
« Odpověď #5 kdy: 15-07-2012, 22:10:18 »
funguje to, pouzivam to ;)
ale nevim, jestli je to to, co potrebujes ...

tj. mas Projekt1 a v tom si nastavis napr. direktiva1,
v Projekt2 si nastavis direktiva2

a pak ve sdilene unite bys mel - ifdef direktiva1 a ifdef direktiva2,
rebuildnes Projekt1 a bude se brat prvni ifdef,
to same pro Projekt2

PS: nestaci zkompilovat (unita je jiz zkompilovana pro jednu direktivu a pouzije se stara),
je potreba build