Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Linuxilla ohjelmointi

DrDeath [06.08.2013 20:05:16]

#

Windows-ympäristössä c++-ohjelmointi onnistuu helposti asentamalla Microsoftin oman Visual Studion. Käyttäjä valitsee uuden projektin, antaa sille nimen ja painaa luo. Nyt projekti on jo melko pitkälti valmiina kehitykseen. Koodia voi alkaa syöttämään samantien ja ohjelma käynnistyy yhden napin painalluksella. Jos tarvitsee toisen kooditiedoston, voi sen helposti luoda projektiin ja se on suoraan kytketty mukaan ja kääntyy projektin mukana.

Käsittääkseni myös Applen luomassa maailmassa tilanne on kutakuinkin sama.

Linux-ympäristössä ohjelmointi on edellisiin verrattuna hieman hassua. Erilaisia linux-jakeluita ja työpöytäympäristöjä löytyy useita erilaisia. Näille on kehitetty omia edellisten kaltaisia kehitysympäristöjä. Anjuta on Gnomelle ja KDevelop KDE-ympäristöön tarkoitettu ohjelmisto. Näitä voi toki käyttää ristiinkin ja jopa aivan toisilla ympäristöilläkin. Tästä huolimatta ei näiden tai muiden vastaavien taso yllä kahden ensimmäisen tasolle. Esimerkiksi, jos ei tahdo käyttää kde:tä, mutta pitää kdevelop-ohjelmistosta muuten, niin voi tulla ongelmia ohjelmiston ulkoasun kanssa kun se ei aivan tottele perinteisiä ulkoasuasetuksia vaan käyttää ihan omia asetuksiaan. Vaikka asetukset muuttaisi vastaamaan muuta järjestelmää, saattaa ohjelmisto käyttää hieman toista kirjastoa taustalla ja lopputulos on silti erilainen tai jopa erittäin epämielyttävä.

Tietysti linux-ympäristöön löytyy myös päällepäin alkeellisempiakin ratkaisuja, mutta ne vasta hassuja ovatkin, kun jokainen käännettävä tiedosto pitää kirjata johonkin epämääräiseen ja ohjelmisto-kohtaiseen tekstitiedostoon. Myös erilaisia käännösohjeita ja mitälie pitää näille ohjelmistoille opetella kirjoittamaan ja myös kirjoittaa. Tämä tie on melko ankea ja inhottava, jos alkuperäinen ajatus oli kirjoittaa c++-koodia ja lopputuloksena lukee ohjeita kuinka cmake (tai muuta), ympäristöä käytetään tai mitä muuttujia mihinkin tekstitiedostoon tulee määrittää, jotta edes jokin toimisi.

Tämä viimeinen ratkaisu olisi toki mielenkiintoisin. Onko linux-ympäristöön (työpöytäriippumaton) sellaista ohjelmistoa, joka yhdistäisi Windowsin kehitystyökalujen yksinkertaisen käytön ja Linuxin työkalujen valinnanvapauden?

Olisi siis hienoa, jos linux-ympäristössä voisi luoda jotenkin uuden projektin, kirjoittaa hieman koodia millä tekstinmuokkaimella tahansa, antaa yksinkertainen komento, joka tunnistaisi kääntämiseen tarvittavat tiedostot ym. suoraan itse, ja ohjelma heräisi henkiin. Jos tarvitsee uuden kooditiedoston, voisi sen vain luoda ja se taas automaattisesti tunnistettaisiin ilman, että tarvitsee paneutua mihinkään ohjekirjaan että mihinkäs tekstitiedostoon mihinkin kohtaan tämä uusi tiedosto tulee kirjata.

Toki tässä on hieman eroa sillä että Windowsissa ja OS X:ssä kyse on kehitysympäristöstä (Integrated Development Environment) ja haluamassani tilanteessa kyse on enemmänkin ryhmästä työkaluja.

fergusq [06.08.2013 21:04:28]

#

Ei Linuxilla ohjelmointi ole sen vaikeampaa kuin Windowsillakaan. Työkaluja projektien hallintaan ja IDE-ympäristöjä on monia.

Esimerkiksi itse käytän C++-ohjelmointiin Eclipseä.

Lisäys: Vielä lopuksi näkökulma: En itse käytä Windowsia mihinkään. Pelkkä yksinkertaisen ohjelman kääntäminen ilman linuxin kirjastoja ja käännöstyökaluja on erittäin tuskallista.

vesikuusi [06.08.2013 22:11:55]

#

Komppaan fergusq:a.

Aloittajan viesti on muutenkin niin käsittämätön, ettei tässä edes viitsi alkaa argumentoida.

henkkeli [07.08.2013 08:22:14]

#

Linux tarjoaa uskomattoman määrän softaa ja kilkettä koodaamiseen. Toki sinnekin löytyy "visuaalisia" IDE:jä (netbeans, codeblocks, eclipse, kdevelop, qtcreator). Itse koodaan emacs:lla, joka toimii normaalisti tekstieditorina(sisältää luonnollisesti c/c++ keyword värjäykset, paljon erilaisia automaattisia sisennysvaihtoehtoja jne), mutta lisäksi voit esim. kääntää ja debugata ohjelmaa "editorin" sisällä.

Suosittelen maken käytön opettelemaan kunnolla. On mahdollista tehdä yksinkertaisille projekteille "yleis-makefile" (olettaen että kaikki kooditiedostot samassa kansiossa ja ei tarvetta erillisten kirjastojen linkkaamiselle) joten joka pikkuprojektille ei toki tarvitse omaa väsätä.

vuokkosetae [07.08.2013 11:12:38]

#

Itse käytän QT:n käpistelyyn qtcreatoria, muuten koodaan Emacsilla ja makea apuna käyttäen C ja C++ juttuja.

Yleensä se alkeellinen ympäristö on se Windows. Siellä kun ei ole työkaluja oikein mihinkään. Softakehitys on tasan tarkkaan visual studio ja kun menet sen mukavuusalueelta pois tiput joko command promptiin, jolla kolhii itsensä pahemmin kuin Bashin lainauksilla tai sitten joutuu käyttämään power shelliä. Esimerkiksi tappelin pitkään ja huolella plantuml:n ajamisen kanssa oikeaan aikaan.

Apple on hieman ystävällisempi, koska pellin alta löytyy BSD:n kalut. Itku vain tahtoo tulla siinä vaiheessa kun ohjelma on kehitetty OpenBSD:n oletusasennuksessa toimivaksi ja sitä ei jostain Steve-Sedän haamun pöljästä päätöksestä saa toimimaan.

Linuxissa ja useimmissa BSD:ssä kaikki on toisinpäin. Palikoita on enempi kuin tarvitsee ja valinnan vapaus jyllää. Ongelmaksi muodostuu Ubuntu, Debian ja Red Hat (sisältää fedorat ja muut). Tarjoavatko ne paketeistaan sopivan vaihtoehdon ja millä versiolla.

Mutta Maken opettelu on viisauden tai hulluuden alku. Oppimiskäyrä on ja se on jyrkkä. Helpommalla toki pääsee jos leikkii valmiilla palikoilla kuten Eclipse, mutta silloin helposti muuraa itsensä jonnekin hassuun nurkkaan.

DrDeath [18.08.2013 23:04:14]

#

Kiitos vastauksista!

Make:n opettelu oli todellakin kannattavaa. Sain väsättyä itselleni sopivan yleis-makefile:n, jota ei tarvitse muuttaa jatkuvasti.

Kirjastojenkin käyttö on todella helppoa.

Tässä vielä nykyinen makefile:

target = sandbox
libraries = cppnetlib-uri cppnetlib-client-connections
sourcesdir = src/
objectsdir = build/
sourcext = cpp

cc = g++
options = -O2 -g -Wall
includes = -I lib/

sources = ${wildcard ${sourcesdir}/*.${sourcext}}
objects = ${addprefix ${objectsdir}, ${notdir ${sources:.${sourcext}=.o}}}
libs = ${addprefix -l, ${libraries}}

.phony: all clean

all: ${objects}
	@${cc} ${options} ${includes} ${objects} ${libs} -o ${target}
${objectsdir}%.o: ${sourcesdir}%.${sourcext}
	@${cc} ${options} ${includes} -c $< -o $@
clean:
	-@rm ${target}
	-@rm -rf ${objectsdir}*.o

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta