Kirjoittaja Aihe: c++ ohjelmointi linux:ssa  (Luettu 8016 kertaa)

lukutoukka

  • Käyttäjä
  • Viestejä: 65
    • Profiili
c++ ohjelmointi linux:ssa
« : 30.11.08 - klo:16.24 »
Eli ajattelin siirtyä koodaamisessa linux puolelle, joten mitä täällä tarvitaan ja mitkä ovat editoreina. Sekä tietenkin, miten ohjelma käännetään.

Haluaisin myös saada hyvät kirjastot roguelike pelin ohjelmointiin, jotta pääsen alkuun, eikä kirjastojen etsimisessä mene aikaa. Myös olisi hyvä tietää, mitä suurimpia eroja on windows puolella ohjelmoinnista siirtyminen linux puolelle.

Toivottavasti tämä oli tarpeeksi selkeä viesti...

peran

  • Vieras
Vs: c++ ohjelmointi linux:ssa
« Vastaus #1 : 30.11.08 - klo:20.06 »
Editorina voit käyttää lempieditoriasi. Itse ohjelmoin edelleen geditillä, vaikkei se olekaan kaikkein paras, mutten pitkiä koodeja ole tehnytkään.

Taleman

  • Käyttäjä
  • Viestejä: 79
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #2 : 01.12.08 - klo:10.43 »
Hyvät kirjastot saat katsomalla mitä rogue käyttää, lähdekoodithan ovat saatavilla, http://packages.ubuntu.com/hardy/games/bsdgames-nonfree. Samalla näet Makefilen eli voit katsoa miten se käännetään.

Muita roguen kaltaisia pelejä joista myös voi katsoa mallia löytyy komennolla
 
Koodia: [Valitse]
apt-cache search rogue
Editoriksi kannattaa valita semmoinen mitä osaa käyttää ja mikä miellyttää. Sopivia on aika paljon, hakea voi:
 
Koodia: [Valitse]
apt-cache search editor programmerja tosta taitaa vielä emacs puuttua.
Tapio Lehtonen
Pori

qwertyy

  • Käyttäjä
  • Viestejä: 5778
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #3 : 01.12.08 - klo:12.54 »
En ole ohjelmoija, mutta ajatus on välillä pyörinyt mielessä. Itseasiassa toissapäivänä taisin törmätä tähän, joka voisi auttaa
http://www.flug.fi/ohjeita/linux-ohjelmointi.html

Niin ja seuraavan dokumentaatiosivulta löytyvät tutoriaalit tuntui olevan myös aika kattavia.
http://www.gtk.org/
« Viimeksi muokattu: 01.12.08 - klo:12.56 kirjoittanut qwertyy »

lukutoukka

  • Käyttäjä
  • Viestejä: 65
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #4 : 01.12.08 - klo:18.35 »
Kiitoksia tiedosta, taidanpa testata noita, mikä olisi KDE työpöydälle hyvä editori, siis hyvin varustettu?

snifi

  • Vieras
Vs: c++ ohjelmointi linux:ssa
« Vastaus #5 : 01.12.08 - klo:18.49 »
Siitä on monia mielipiteitä: vim, emacs, kate, gedit...

Mieti myös vielä yhteen kertaan ohjelmointikielen valintaa. C++ on moneen sovellukseen kohtuuttoman raskas ja vaikeaselkoinen. Tällä hetkellä se on niin sanottu teollisuusstandardi, mutta saat etumatkaa, jos nyt onnistut valitsemaan sen, joka viiden vuoden päästä on samassa asemassa.
« Viimeksi muokattu: 01.12.08 - klo:18.52 kirjoittanut snifi »

lukutoukka

  • Käyttäjä
  • Viestejä: 65
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #6 : 01.12.08 - klo:19.54 »
Mieti myös vielä yhteen kertaan ohjelmointikielen valintaa. C++ on moneen sovellukseen kohtuuttoman raskas ja vaikeaselkoinen. Tällä hetkellä se on niin sanottu teollisuusstandardi, mutta saat etumatkaa, jos nyt onnistut valitsemaan sen, joka viiden vuoden päästä on samassa asemassa.

No c++ harjoittelen siksi, että itsellä on sitä käsittelevä opus ja osaan siitä jo perusteet (sekä olio-ohjelmoinnin perusteet...). Jos tiedät paremman ohjelmointikielen, niin kerro ihmeessä. Mielellään samanlainen kieli sen pitäisi olla, kuin c++.

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #7 : 02.12.08 - klo:00.27 »
Mieti myös vielä yhteen kertaan ohjelmointikielen valintaa. C++ on moneen sovellukseen kohtuuttoman raskas ja vaikeaselkoinen.

minusta c++ on ihan kelvollinen valinta. en ymmärrä miten se olisi erityisen raskas, mutta olen kyllä valmis myöntämään, että sen syntaksi voi paikoitellen mennä vähän monimutkaiseksi, mutta ei oikeastaan ihan alussa.

Tällä hetkellä se on niin sanottu teollisuusstandardi, mutta saat etumatkaa, jos nyt onnistut valitsemaan sen, joka viiden vuoden päästä on samassa asemassa.

tavallaan ymmärrän kyllä ihmisiä jotka haluavat opetella sen kielen "jolla saa töitä", mutta minusta sen ei pitäisi olla itseisarvo. ohjelmoimaan oppii ainoastaan ohjelmoimalla ja ohjelmoijan on joka tapauksessa hyvä osata useampaa kieltä. uuden kielen syntaksin oppiminen on kuitenkin verraten helppoa jos sitä vertaa ohjelmoinnin opetteluun.

lisäksi tällä hetkellä suosittuja tuntuvat olevan monet tulkattavat ja tavukoodiksi käännettävät kielet. se on toki ihan ok ja pidän itsekin joistain niistä, mutta matalamman tason ohjelmointikielille tulee aina olemaan tarvetta, enkä äkkiseltään keksi olemassa olevaa kieltä joka syrjäyttäisi c++:n aseman viidessä vuodessa saati sitten, että tyhjästä ilmestyvä onnistuisi niin tekemään. tosin it-alalla on paha tehdä ennustuksia ;)

jos KDE-puolelle haluaa IDE:ä, niin kdevelop on oikeasti varsin kelvollinen.
Janne

tuke81

  • Käyttäjä
  • Viestejä: 1667
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #8 : 02.12.08 - klo:01.25 »
Se vähä mitä c:tä olen koodannut olen tehnyt kate:lla ihan passeli siihen kuin myös vhdl:ään, matlab .m tiedostoihin(tosin octavea käyttelen tätä nykyä). Katessa on hyvät selkeät väritykset jokaiselle kielelle.
Miksi tehdä jotain helposti, kun sen voi tehdä vaikeastikin...

lukutoukka

  • Käyttäjä
  • Viestejä: 65
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #9 : 02.12.08 - klo:17.53 »
noniin nyt ajattelin kääntää koodin, eli miten se tapahtuu makefile:n kautta? Itse en tajunnut sitä, vaikka luinkin tuon ohjeen. Muutes toimiiko linuxissa c++ modularisointi samaan tapaan kuin windowsissa (paitsi niiden riippuvuusteen muodostus tai mitä nyt onkaan, linkitys jne...)

eraggo

  • Käyttäjä
  • Viestejä: 63
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #10 : 18.12.08 - klo:11.57 »
Siis makefileen sijoitat vain haluamiesi käännettävien sovellusten käännösohjeet make-komennolle. Jos esimerkiksi sinulla on kolme toisistaan riippumatonta ohjelmaa voit kääntää ne helpommin muistelematta mitä argumentteja kääntäjälle kerrotaan; riittää, että tiedät ne makefile:ä tehdessäsi.

Otetaan esimerkki:
oletetaan, että sinulla on kaksi eri ohjelmaa samassa kansiossa makefile:n kanssa: ohj1.c ja ohj2.c . ohj2.c on SDL:ää käyttävä ja ohj1.c on vain konsoli ohjelma, joka käyttää vain peruskirjastoja

makefile:n sisältö:
Koodia: [Valitse]
all:
       gcc ohj1.c -o ohj1
       gcc ohj2.c -lSDL -o ohj2
ohj1: ohj1.c
       gcc ohj1.c -o ohj1
ohj2: ohj2.c
       gcc ohj2.c -lSDL -o ohj2

Nyt, kun suoritat make-komennon, käännetään sekä ohj1 ja ohj2. Mutta, kun annat komennon "make ohj1", käännetään vain ohj1. Samalla logiikalla voidaan tehdä useammallekin ohjelmalle.

-eraggo-

ps. en kyllä noista käännöksien komentojen lipuista ole ihan varma, mutta oikaiskaa jos olen väärässä

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #11 : 18.12.08 - klo:12.13 »
makefile:n sisältö:
Koodia: [Valitse]
all:
       gcc ohj1.c -o ohj1
       gcc ohj2.c -lSDL -o ohj2
ohj1: ohj1.c
       gcc ohj1.c -o ohj1
ohj2: ohj2.c
       gcc ohj2.c -lSDL -o ohj2

Samoja käskyjä ei kannata määritellä moneen kertaan vaan on parempi viitata niihin riippuvuuksilla.

Koodia: [Valitse]
all: ohj1 ohj2

ohj1: ohj1.c
       gcc ohj1.c -o ohj1

ohj2: ohj2.c
       gcc ohj2.c -lSDL -o ohj2
« Viimeksi muokattu: 18.12.08 - klo:12.16 kirjoittanut mgronber »

lukutoukka

  • Käyttäjä
  • Viestejä: 65
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #12 : 21.12.08 - klo:22.30 »
Okei, kiitoksia tiedosta, mutta en kuitenkaan tajunnut tuota. Eli voisiko joku näyttää tällä pienellä koodillani miten tuo koodi jaetaan ja laitetaan toimimaan makefilen kautta? Eli toivon, että tuo Peli luokka laitettaisiin omaan tiedostoon ja sitten koko systeemi kääntymään makefilen kautta. Toivottavasti ei oo liikaa pyydetty.

Koodia: [Valitse]
#include <ncurses.h>

class Peli //Pääohjelman luokka
{
int syote; //Näppäimen painallus
int lopeta; //kertoo, että onko ohjelma lopetusvalmis
public:
Peli(); //Alustaa yllä mainitut asiat
void Aja(); //Ohjelma ajetaan tässä
void LueSyote(); //Syötteiden luku
int Lopeta(int syote, int merkki); //Ohjelman lopetuksesta huolehtiva toiminto palauttaa 1 jos lopetetaan
};

Peli::Peli() //Pelin tietojen alustus
{
syote = 127;
lopeta = 0;
}

/////////////////////////////////////////
/////////////////////////////////////////

void Peli::Aja() //Toiminto, johon kaikki lopulta liitetään.
{
do
{
//PIIRETÄN PELI

//TOIMINNOT
LueSyote(); //Luetaan pelaajan antamat syötteet

lopeta = Lopeta(syote,113); //Lopettaa ohjelman, jos painetaan q

}
while (lopeta == 0);
}

//////////////////////////////////////////
//////////////////////////////////////////

void Peli::LueSyote() //Lukee näppäimistön syötteet
{
syote = getch(); //Luetaan syöte
}

//////////////////////////////////////////
//////////////////////////////////////////

int Peli::Lopeta(int syote, int merkki) //Hoitaa pelin sulkemisen ja tallentamisen
{
if(syote == merkki)
{
return 1;
}
return 0;
}

//////////////////////////////////////
//////////////////////////////////////

int main (int argc, char** argv)
{
//ALUSTETAAN NCURSES TOIMIMAAN
initscr(); //Siirytään käyttämään cursesia
keypad(stdscr,TRUE); //Otetaan nuolinäppäimet käyttöön
raw (); //Näppäimet suoraan käyttöön, ei puskurointia
start_color(); //Värien käyttö otetaan päälle
curs_set(0); //Poistetaan tekstikursori näkyvistä
noecho(); //ei piiretä syötettyä tekstiä näytölle

//ITSE OHJELMA
Peli paaohjelma;
paaohjelma.Aja();

//LOPETETAAN OHJELMA
endwin(); //Suljetaan curses tila
return 0;
}

HannuTapio

  • Käyttäjä
  • Viestejä: 1264
  • OpenJDK + JavaScript testailuu ja säätelyy.
    • Profiili
    • Hannun netti internet sotaisa aihe lautapelejä.
Vs: c++ ohjelmointi linux:ssa
« Vastaus #13 : 24.12.08 - klo:13.55 »
Hei!

Eikös Netbeans olisi se "paras" valinta editoriksi ???

//----

Kiitos,,
Suomalainen Linux netti lautapelejä indie .. ( Gimp, Inkscape, Netbeans, Audacity ) ..
Blogi - [ https://lautapelimestari.com ]
Pelisivut - [ https://lautapelisivusto.com | https://hannunsankarit.com | https://lautapelikenraalit.com ]
--

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #14 : 24.12.08 - klo:16.40 »
Eikös Netbeans olisi se "paras" valinta editoriksi ???

ei.

tai vähän laajemmin, jos siitä tykkää, mutta noin yleisesti ottaen... ei.

noista makefileistä vielä sen verran, että niitä käytetään kyllä windowsissakin. tosin niiden syntaksi yleensä vähä riippuu maken toimittajasta ja aika usein käytössä oleva IDE ylläpitää makefilea, joten käyttäjän ei aina tarvitse siihen koskeakaan. make ja sen syntaksi on kuitenkin hyvä opetella, vaikka linuxissa käytetään usein vielä korkeamman tason virityksiä ympääristön konfiguroimiseksi ja makefilen tuottamiseksi.
Janne

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #15 : 25.12.08 - klo:00.07 »
Eli voisiko joku näyttää tällä pienellä koodillani miten tuo koodi jaetaan ja laitetaan toimimaan makefilen kautta?

Makefilen tekemiseen on monta erilaista tapaa. Jotkut tuntuvat pyrkivän maksimoimaan käsin tehtävän työn ja inhimillisten virheiden mahdollisuuden kun toiset pyrkivät selviämään mahdollisimman vähällä ja minimoimaan päivityksistä aiheutuvat virheet.

Itse pyrin jälkimmäiseen tapaan ja siitä syystä tämä ei ole minimaalisin mahdollinen ratkaisu pyyntöösi. Hajautin antamasi koodin useampaan tiedostoon. Esimerkkini tukee pelkästään cpp-tiedostoja ja kaikki lähdekooditiedostot ovat käännösriippuvaisia kaikista headereistä. Toinen vaihtoehto olisi määritellä header-riippuvuudet tiedoskohtaisesti mutta niiden ylläpitäminen ei ole ihmisen hommaa vaan käytännössä se pitäisi automatisoida jolloin ratkaisu olisi nykyistä monimutkaisempi.

Komennolla "make" tai "make all" käännetään koko projekti. Komennolla "make clean" siivotaan projektiin liittyvät käännöstiedostot.

Alla on Makefile ja liitteenä koko esimerkkiprojekti.

Koodia: [Valitse]
EXECUTABLE  = main
HEADERS     = peli.h
SOURCES     = main.cpp peli.cpp
LIBRARIES   = -lncurses
OBJECTS     = $(SOURCES:.cpp=.o)


CXX         = g++
CXX_CFLAGS  = -g -Wall
CXX_LDFLAGS =


all: $(EXECUTABLE)

clean:
        rm -f $(OBJECTS) $(EXECUTABLE)


$(EXECUTABLE): $(OBJECTS)
        $(CXX) $(CXX_LDFLAGS) -o $@ $(OBJECTS) $(LIBRARIES)

%.o: %.cpp $(HEADERS)
        $(CXX) $(CXX_CFLAGS) -c $<


[ylläpito on poistanut liitteen]

vili

  • Käyttäjä
  • Viestejä: 43
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #16 : 27.12.08 - klo:16.25 »
Itse käytän Code::Blocksia. Toimii hyvin ainakin Ubuntulla ja on helppo aseentaakkin ihan
Koodia: [Valitse]
sudo apt-get install codeblocks käskyllä. Hyvä ainakin jos sitä on joskus käyttänyt vaikka windowsissa ohjelmoidessa.

mikko_h

  • Käyttäjä
  • Viestejä: 202
    • Profiili
Vs: c++ ohjelmointi linux:ssa
« Vastaus #17 : 03.01.09 - klo:00.38 »
Mieti myös vielä yhteen kertaan ohjelmointikielen valintaa. C++ on moneen sovellukseen kohtuuttoman raskas ja vaikeaselkoinen.

minusta c++ on ihan kelvollinen valinta. en ymmärrä miten se olisi erityisen raskas, mutta olen kyllä valmis myöntämään, että sen syntaksi voi paikoitellen mennä vähän monimutkaiseksi, mutta ei oikeastaan ihan alussa.


Menee hieman asian sivusta, mutta kumminkin: C++ Frequently Questioned Answers

   http://yosefk.com/c++fqa/

ja siellä erityisesti tiivistelmä

   http://yosefk.com/c++fqa/defective.html

Ongelma on kertaluokkaa pahempi kuin "paikoitellen monimutkainen" syntaksi, sillä C++:n kielioppi on niin sanotusti ratkeamaton, eli sama lause tarkoittaa eri asioita kontekstista riippuen. Tämä tekee kunnollisen kääntäjän kirjoittamisesta ja järjellisten virheilmoitusten antamisesta perin mutkikkaita ongelmia (minkä huomasi varsinkin takavuosien GCC-versioiden virheilmoituksista).