[VS/C++/git] Klasse(n) in meerdere projecten gebruiken?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 23:19
Ik heb hier enkele klasses die ik in meerdere projecten gebruik, maar die zelf ook enkele dependencies hebben naar andere klasses die in die projecten ook worden gebruikt. Wat is de beste manier om deze op 1 plek te hebben?

Op dit moment heb ik deze klasse gewoon gekopieerd en in de projecten zelf gezet, maar ik word gek van het updaten hiervan. Het voordeel is wel dat iedereen het project op GitHub kan klonen en maar één ding hoeft te doen om dit te kunnen bouwen.

Zelf denk ik dat ik de volgende opties heb, maar kan het misschien handiger? Momenteel ben ik 1 aan het doen.

1. Gooi de bestanden losjes in een map op hetzelfde niveau als de mappen van de projecten. De projecten die deze klasse gebruiken hebben dan referenties hier naar, zodat ze ook de .cpp compileren. In de project file is dan de ../../ClassMap/ als extra include map gezet.
Voordeel:
- 1 set bestanden die voor alle projecten hetzelfde zijn.
- Na 1x instellen van relatieve paden werkt alles soort van vanzelf
Nadeel:
- Bestanden hangen er losjes bij
- Moet een extra repo klonen

2. Gooi ze weer los in diezelfde map, maar dit is dan een git submodule die andere projecten refereren
Voordeel:
- Hoef niks extra te klonen als recursive clone aan staat
- Alle projectbestanden in de huidige map en geen gok op kloppende relative paden
Nadeel:
- Git submodule moet extra maintenance
- Als ik in een project iets aan de shared klasse aan pas, moet de rest ook geüpdatet/gesynct worden

Is (1) een redelijk goed idee? Het zijn gewoon kleine projectjes, dus extra bouwen maakt weinig uit.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Waarom gooi je ze niet in een dll met versie-nrs erin?

Dan kan je gewoon die dll includeren mocht je in een project nieuwere functionaliteit nodig hebben dan verhoog je het vereiste versienr van die dll.

Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
ikt schreef op zondag 7 mei 2017 @ 02:04:
- Git submodule moet extra maintenance
- Als ik in een project iets aan de shared klasse aan pas, moet de rest ook geüpdatet/gesynct worden
Niet perse. Je kan de submodule ook vastpinnen op bv. een branch:
https://git-scm.com/docs/gitmodules

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 01:10
Geen ervaring met C++ maar zijn er geen package managers voor? http://stackoverflow.com/...ager-like-npm-pip-gem-etc

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 23:19
Vastpinnen? Ik moet toch nog steeds "git submodule update" aanroepen per project/repo om de nieuwste bestanden binnen te harken?

Aan een .dll/.lib heb ik zitten denken, maar het zijn meer bugfixes die ik overal meteen wil hebben. Ook leek het me minder handig als dat ook met distributie zit, want dan moet de gebruiker dingen bij gaan houden. Die heeft al moeite met het slepen van 1 bestand en 1 map naar zijn of haar game-map ;(

Package management lijkt me een beetje overkill.

Tsja, het enige aan mijn huidige set-up is dat je 1 extra ding moet klonen en het voelt zo... vies, maar het werkt wel goed. Houden zo maar dan?

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Het is natuurlijk los van de gebruikte technologie altijd zo dat een update van een shared component leidt tot een update van alle andere componenten die daar een dependency op hebben. Dat is nu eenmaal wat een dependency is.

Een .lib is een elegante oplossing; dat linkt statisch mee. Je eindgebruiker houdt een enekel EXE.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Hephaestos
  • Registratie: November 2007
  • Laatst online: 22-08 14:37
Gebruik de oplossing van MSalters, een lib maken waarin je die shared code gooit, en die lib in various andere projecten gebruiken.

Gebeurt meestal (of .dll) met utility/shared code, en geen moeilijk gedoe met git of duplicate code of andere onzin.

En als je toch met C++ bezig ben, maak jezelf bekend met CMake, een project generatie tool, die relatief makkelijk op te zetten is en simpel je hele project kan genereren naar verschillende targets.

[ Voor 28% gewijzigd door Hephaestos op 09-05-2017 00:18 ]

Pagina: 1