Portál AbcLinuxu, 1. května 2025 05:27

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
8.9.2010 02:18 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Odpovědět | Sbalit | Link | Blokovat | Admin
Příloha:
↑ zip balík příkladu ↑
SPD vůbec není proruská
8.9.2010 07:59 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Příloha:
updatovaný zip balík příkladu ↑
8.9.2010 05:39 ____ | skóre: 15 | blog: _
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Odpovědět | Sbalit | Link | Blokovat | Admin

Místo

if((${UNIX}) AND NOT ((${APPLE}) OR (${CYGWIN})))

by mělo být spíš

if(UNIX AND NOT (APPLE OR CYGWIN))

CMake jinak booleany vyhodnocuje blbě.

8.9.2010 06:00 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
To, co jsi napsal jsem tam původně měl, ale nefungovalo to - házelo to warningy, že ignoruje celou tu AND NOT ... část.
Minimálně tam musí být všechny ty závorky - ((...) OR (...)) - ačkoli to na první pohled vypadá nesmyslně (to mám odzkoušeno).
Co se týče toho ${}, tak tam nevím, dokumentace je poněkud kryptická, nicméně jestli jsem to dobře pochopil, ta tvrdí, že if (boobah) bere jako if (${boobah}), ale nepochytil jsem z teho, jestli to platí (i) pro booleany, nebo jen pro ty proměnný, co definici booleanu nevyhovují... No kdyžtak to upravim.
8.9.2010 07:50 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
No tak jsem si to ověřil pořádně, a zjistil jsem, že na Linuxu mi fungují všechny myslitelné kombinace a na windows fungují při použití ${} pouze s extra závorkami nebo uvozovkami. (Verze CMake totožná). Zajímavá nekonsistence... ;-)

No každopádně správně bude nejspíš to, co píšeš ty, takže dík za připomínkku a jdu to opravit...
8.9.2010 08:50 Přemysl
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
set (foo "true")

Potom se if (foo) vyhodnotí jako pravda a if (${foo}) se vyhodnotí jako ${true}, tedy jako nepravda (true nebylo definováno, má tedy svou výchozí hodnotu nepravdivou). Pokud se tedy nemýlím, ale věřím, že jsem to teď napsal správně.

8.9.2010 09:16 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Martin Stiborský avatar 8.9.2010 07:18 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Odpovědět | Sbalit | Link | Blokovat | Admin

Díky za zápisek, záložkuju si to jako "jednou by se mohlo hodit" :)

Kvík ..
8.9.2010 09:34 Tomáš
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Odpovědět | Sbalit | Link | Blokovat | Admin
Mně sa ta přemíra dědičnosti moc nelíbí. Navíc se to nedá použít pro C. Přišlo mi logičtější, jak jsi popisoval způsob v QT. Struktura adresářů by zůstala podobná, jenom se v makefile nastaví cesty.

Ale když to chceš používat, tak to používej.
8.9.2010 10:15 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Příloha:
Ok, pro zájemce teda přikládám modifikaci á la Qt a bez interface. Doufám, že je plně funkční...
dolik.rce avatar 8.9.2010 10:16 dolik.rce
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Odpovědět | Sbalit | Link | Blokovat | Admin
Jde to udělat i s jednou třídou Foo - stačí oddělit poctivě deklaraci do Foo.h a definice metod do sys-win/Foo.cpp, sys-unix/Foo.cpp a případně multiplatformní kód do Foo.cpp (aby jsi ho nemusel udržovat na dvou místech). Pak při kompilaci prostě použiješ soubory z příslušného adresáře.

Problémy nastávají ve chvíli kdy začneš používat templates, které musejí mít metody ve stejném souboru, ale i to se dá řešit.
8.9.2010 10:32 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
nemusi mit metody ve stejnem souboru, jenom musis zarucit aby ten soubor s metodama byl taky inkludovanej
8.9.2010 10:48 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
To je prakticky stejné řešení. Jediný rozdíl je, že v tom mém oddělím členy třídy nezávislé a specifické a můžu mít v platformě specifické třídě public prvky viditelné vyšímu kódu a private prvky soukromé pro platformu.
V tom tvém řešení by také mohl nastat konflikt v konstruktoru - když si nezávislý kód chce něco vytvářet a specifický taky, to by ten specifický musel mít nějakou metodu druhotného konstruktoru, a to už je přehlednější použít buď dědičnost nebo to řešení á la Qt.

Čili podle mě to záleží hlavně na tom, jak moc složitej SW člověk píše...
dolik.rce avatar 8.9.2010 11:01 dolik.rce
Rozbalit Rozbalit vše Re: Multiplatformní kód v C++ s CMake
Čili podle mě to záleží hlavně na tom, jak moc složitej SW člověk píše...
Tak to každopádně...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.