ZaharescuMihai / TDMRC-2015

compression of elemental dust particles
1 stars 2 forks source link

Set linker options from project properties #8

Open emanuelUngureanu opened 9 years ago

emanuelUngureanu commented 9 years ago

Remove "#pragma comment(lib, "./FreeImage/FreeImage.lib")" from Direct_Access_Image.cpp

ZaharescuMihai commented 9 years ago

Crezi ca este un feature important? Daca da, de ce, ca sa stiu sa nu mai folosesc in viitor, daca incurca cu ceva.

ReDEnergy commented 9 years ago

Nu e asa de important. Cel putin nu pentru proiectul de fata. Ambele variante sunt corecte. #pragma comment e in cod si necesita compilare comparativ cu folosirea unui property file dar nu e nimic gresit. Teoretic e mai simplu cu property files pentru ca poti configura librarii separate pentru fiecare build configuration. Chestia asta se poate face si din cod cu #ifdef si #endif dar pana la urma pentru un proiect mic e o chestie de gust. Deci nu e un bug.

emanuelUngureanu commented 9 years ago

Off-topic: Nu am intentionat sa fac pull request pentru acest issue, doar sa modific la mine si apoi daca e ok sa fac pull request :)

On-topic: E vorba ca hardocodarea unei biblioteci in cod ingreuneaza mult reutilizarea codului. Fiecare are stilul lui de a organiza un proiect si dependintele lui in director.

E un bug/flaw de design cu problemele traditionale implicate de hardcodare care leaga etapa de linkare de cod si compilare si are prioritate fata de alte setari pentru aceeasi biblioteca. De exemplu daca ai un proiect mare si setezi biblioteca asa, poti sa ajunge sa recompilezi o buna parte din proiect doar pentru ca ai modificat in cod calea catre biblioteca in loc sa treci direct la etapa de linkare.

De obicei partea asta se seteaza in Project Configuration in majoritatea programelor de c/c++ pe care le intalnesti, in GCC nici macar nu exista #pragma comment lib si bibliotecile sunt specificate in makefile.

Pentru proiecte mici, personale nu e o problema. Dar cand poate fi utilizat/modificat de altii ei trebuie sa foloseasca aceeasi structura de directoare, care trebuie specificata intr-un readme si daca vor sa o schimbe trebuie sa sape prin cod ca sa modifice calea. Cand proiectul creste si ajunge sa foloseasca multe biblioteci trebuie sa tii evidenta in care fisier si la ce linie este fiecare, lucru care complica modificarea codului si invita alte greseli.

De exemplu, eu am modificat scheletul sa genereze o biblioteca statica si am pus folderul cu FreeImage intr-un folder in SolutionDir ca sa poata fi gasit usor ca dependinta a intregului proiect. Cand am compilat programul care folosea biblioteca scheletului de cod, linkerul cauta FreeImage la calea hardcodata si nu la cea setata in proprietati.

Update: Daca nu aveam acces la codul sursa nu as fi reusit sa compilez proiectul

ZaharescuMihai commented 9 years ago

Bine, o sa modific in versiunea urmatoare, cand o sa inchid si issue-ul.