Pozdrav,

VS radi kako treba uz najnoviji apdejt! Isprobao sam ponovo File/New/Project from existing code, i sada ga kompajlira iz prve.

Pozdravi,
Dušan

уто, 22. феб 2022. у 08:48 Nenad Korolija <nenadko@gmail.com> је написао/ла:
Naravno, meni odmah perfektno radi. :)
Marko, ja sam razmisljao na temu Makefile, sto bi valjda resilo VS probleme.
Vidim da si include probleme jednostavno resio sa #include "triangulator.hpp".
Sto se mene tice, OK je ovako (ja sam zadovoljan:),
mada ukljucujes u input-and-output.cpp i set i vector i list.
Svidja mi se i sto pravis biblioteku.

Mislim da je sustina VS problema sto hoce da kompajlira svaki unit zasebno.
Makefile bi u neki direktorijum (npr. obj) ostavljao pojedinacne .o fajlove,
kako ne bi moralo sve da se rekompajlira, vec samo promenjeno,
a brisalo bi se sa make clean. Naravno, kod je mali i ne bi bilo neke primetne razlike.
Nisam razmisljao na temu biblioteka. Naravno, sve je moguce napraviti...

Pozdrav,
Nenad

On Tue, Feb 22, 2022 at 5:43 AM Marko Vojinovic <vmarko@ipb.ac.rs> wrote:

Pozdrav svima,

Obratite paznju na moj commit od veceras/nocas, i obavezno uradite "git pull", jer je dosta toga prepravljeno:

* Prvo, razmrsio sam .hpp i .cpp fajlove --- .cpp fajlovi se vise ne include-uju nigde, a svi .hpp fajlovi se include-uju u glavni "triangulator.hpp", koji je onda include-ovan u svaki .cpp fajl ponosob. Ovo omogucava da se svaki .cpp fajl kompajlira nezavisno od ostalih (u object-fajl), sto ce verovatno da olaksa zivot delu ekipe koja koristi Visual Studio. :-) Skrecem vam paznju da pazite na redosled kojim se svi ostali .hpp fajlovi include-uju u triangulator.hpp --- vazno je da klase definisemo redom.

* Drugo, premestio sam neke delove koda na zgodnija mesta, i kreirao par novih fajlova, tako da sada svaki .cpp fajl ima svoj .hpp fajl i obratno. Izuzetak su triangulator.hpp i main.cpp koji nemaju svoje parnjake. Ovakvu strukturu bi imalo smisla da cuvamo i ubuduce, kada budemo dodavali nove fajlove. Kad broj fajlova naraste, mozemo da ih razvrstamo i po direktorijumima...

* Trece, fajl constants.hpp je obrisan, a konstante koje su bile u njemu su premestene u color.hpp odnosno u input-and-output.hpp, gde su im prirodnija mesta. Dusan ce da se obraduje da sam ih sve stavio u #ifndef. ;-) U nov fajl input-and-output.cpp sam stavio log-report f-ju, a tu cemo kasnije da dodamo i f-je za citanje/snimanje u fajl (zadaci 7 i 8), kao i raznorazne druge f-je za export-ovanje u .tex, ovo, ono...

* Cetvrto, napisao sam build-script.sh, u kome se vide detalji sta i kako treba da se kompajlira. Pod Linux-om mozete prosto da izvrsite skript, a ako radite pod Windows-om procitajte sta pise u fajlu, pa na osnovu toga konfigurisite svoj build-environment. Skript cemo u buducnosti verovatno da zamenimo nekom ozbiljnijom Makefile strukturom i/ili ekvivalentom za Windows, ali za sada moze da posluzi i ovako.

* I peto --- *sam kod* uopste nisam menjao, samo sam ga prepakovao po fajlovima. Sve f-je i klase su iste kao sto su bile pre refactoring-a. Tako da ako ste poceli nesto da radite, mozete da nastavite bez ometanja, samo obratite paznju sta treba da ide u koji fajl --- svaka f-ja ide u neki .cpp, a njena deklaracija u odgovarajuci .hpp.


To je to sto se tice izmena. Logika celog poduhvata je sledeca --- glavni "priozvod" celog naseg koda treba da budu sledeca dva fajla:

   triangulator-library

(sa ekstenzijom .a, .so, .lib, .dll, ili bilo sta sto se smatra standardnim za staticke biblioteke na datoj platformi), i

   triangulator-gui

(bez ekstenzije ili sa ekstenzijom .exe, .app, ili sta god je odgovarajuce za izvrsni fajl na datoj platformi).

Prvi fajl je staticka biblioteka rutina [1] --- nju ce "nas korisnik" da upotrebljava u svom kodu ovako kako je mi sada upotrebljavamo u main.cpp fajlu --- include-ovace triangulator.hpp (koji sadrzi definicije svih konstanti, klasa, i deklaracije svih f-ja), i onda ce ulinkovati biblioteku rutina dok kompajlira svoj kod. Naravno, ako zeli, moze da prekompajlira i samu biblioteku, ako mu binary verzija ne odgovara.

Drugi fajl ce da bude izvrsni, koji pokrece GUI. Nega cemo da napravimo isto kao i nas korisnik --- include-ovacemo triangulator.hpp u kod za GUI, i onda cemo da ulinkujemo biblioteku rutina tokom kompajliranja GUI-ja. GUI ce da poziva f-je iz biblioteke kako mu odgovara, zavisno na sta klikcemo po GUI-ju.

To je ukratko generalna logika kako cela stvar treba da radi. Ubuduce samo treba da postujemo strukturu .hpp/.cpp parova, da azuriramo build-script.sh kada dodajemo nove .cpp fajlove, i da svi novi include-ovi idu iskljucivo u triangulator.hpp i nigde drugo.

Btw, Jaroslave i Dusane, javite mi kako stoje stvari sa Visual Studiom nakon ovog refactoring-a --- da li je sada jednostavnije import-ovati kod u VS, i da li je proradio i native VS-kompajler ili se i dalje oslanjate na g++.

:-)
Marko

[1] https://en.wikipedia.org/wiki/Static_library



Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail:    vmarko@ipb.ac.rs


--
QGHG-it-dev-list mailing list
QGHG-it-dev-list@ipb.ac.rs
http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
--
QGHG-it-dev-list mailing list
QGHG-it-dev-list@ipb.ac.rs
http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list