Strona 1 z 2

Geany - linker

: 02 paź 2010, 00:17
autor: next_user
Witam

Do c++ używam Genay , ale czy mozna jakos zapisac regułe przy budowaniu aby kompilował wszystkie pliki cc ?

bo jeżeli dam regułę "*.cc" to niestety ale nie działa

i dalego musze kompilować z konsoli

Odp: Geany - linker

: 02 paź 2010, 09:28
autor: borzole
stwórz prosty makefile

Odp: Geany - linker

: 02 paź 2010, 09:38
autor: beluosus
@next_user: da się "*.cc":
viewtopic.php?t=113947#post671033
jednak wspomniany Makefile jest lepszym rozwiązaniem.

Odp: Geany - linker

: 02 paź 2010, 10:58
autor: next_user
nie da sie, ponieważ wywala mi blędy przy kompilacji , dlatego napisalem ze sie nie da:)

a jak ten makefile zrobic ? moze jaksi link? bo patrzylem wczesniej za tym ale nie bardzo wiedzialem gdzie mam to umiescic i jak sie do tego odwołać

Odp: Geany - linker

: 02 paź 2010, 11:58
autor: dawwin
Zasady tworzenia prostego makefile (minuta googlowania):
http://www.programuj.com/artykuly/linux/makefile.php

Do tworzenia projektów dobrze nadają się narzędzia GNU autotools
http://drumlin.republika.pl/auto.html
Ale one na początek nie będą Ci potrzebne

Odp: Geany - linker

: 02 paź 2010, 12:30
autor: next_user
tak, pogooglowalem , jak napisalem odp na forum, ale cos mi nie dziala

wchodze w folder gdzie znajduja sie pliki źrodlowe oraz plik 'makefile'

wywoluje polecenie 'make' ale nic to nei daje

tylko otrzymuje informacje
'make: *** Nie podano obiektów i nie znaleziono makefile. Stop.'

Kod: Zaznacz cały

CXX = g++ 
CFLAGS = -g -O # tutaj można dodawać inne flagi kompilatora
LIBS = -lm `pkg-config gtkmm-2.4 --cflags --libs` # tutaj można dodawać biblioteki

OBJ =\
    main.o \
    helloworld.o

all: main

clean:
       rm -f *.o test2
.c.o:
       $(CXX) -c $(INCLUDES) $(CFLAGS) $<

main: $(OBJ)
       $(CXX) $(OBJ) $(LIBS) -o test2

Odp: Geany - linker

: 02 paź 2010, 12:35
autor: dawwin
Jesteś pewien, że wykonujesz polecenie make w tym samym katalogu, w którym jest plik Makefile? Nazwij ten plik z dużej litery i spróbuj

Odp: Geany - linker

: 02 paź 2010, 13:53
autor: next_user
dobra juz widzi, rozwiazalem problem z
'brakujacy sepearator' ale teraz wyskakuje ze nie widzi bibliotek potrzebnych do gtk

Odp: Geany - linker

: 02 paź 2010, 13:55
autor: dawwin
A masz je zainstalowane?

Kod: Zaznacz cały

apt-get install libgtk2.0-dev

Odp: Geany - linker

: 02 paź 2010, 14:07
autor: next_user
tak mam zainstalowane bo jak kompiluje z konsoli wpisujac kazdy plik cc to normlanie dziala ;)

i jak np mial bym folder 'classes' i chcial do niego wrzucic pliki cc to w makefile musial bym to jakos konretnie zasugerowac ? czy wystarczy przy obj podac sciezke ?

Kod: Zaznacz cały

CXX=g++ 
CFLAGS=-g -O # tutaj można dodawać inne flagi kompilatora
LIBS= `pkg-config gtkmm-2.4 --cflags --libs` # tutaj można dodawać biblioteki

OBJ=\
    main.o \
    helloworld.o \
    jakisKatalog/nazwaobiektu.o 

all: main

clean:
    rm -f *.o test2
.cc.o:
    $(CXX) -c $(INCLUDES) $(CFLAGS) $<

main: $(OBJ)
    $(CXX) $(OBJ) $(LIBS) -o test2

Odp: Geany - linker

: 02 paź 2010, 14:14
autor: dawwin
Przy obj możesz podać ścieżkę i będzie OK.
A co do GTK to pokaż, jaki dokładnie błąd Ci zwraca kompilator

Odp: Geany - linker

: 02 paź 2010, 14:21
autor: next_user

Kod: Zaznacz cały

In file included from main.cc:1:
helloworld.h:4:26: error: gtkmm/button.h: No such file or directory
helloworld.h:5:26: error: gtkmm/window.h: No such file or directory
main.cc:2:24: error: gtkmm/main.h: No such file or directory
In file included from main.cc:1:
to jest fragment

takie bledy mialem jezeli nie includowal mi biblioteki gtk daltego przypuszczam ze tutaj jest ten sam problem ;)

Odp: Geany - linker

: 02 paź 2010, 14:26
autor: dawwin

Kod: Zaznacz cały

.cc.o:
    $(CXX) -c $(INCLUDES) $(LIBS) $(CFLAGS) $<
I nie wiem, po co Ci $(INCLUDES), skoro nie jest nigdzie zainicjalizowane

Odp: Geany - linker

: 02 paź 2010, 14:29
autor: next_user
szczerze to na szybko skopiwoalem przyklad i zmienilem tylko nazwe kopilatora z gcc na g++ oraz pliki, bo nie bardzo mialem czas zeby sie w tym zaglebic, i fakt, nigdzie nie jest incjalizowane includes, mimo to po wyrzuceniu tego nie dziala (bo raczej nie powinno to miec i tak znaczenia:) )

Odp: Geany - linker

: 02 paź 2010, 14:34
autor: dawwin
next_user pisze:[...] mimo to po wyrzuceniu tego nie dziala [...]
A zobacz, co dopisałem w poprzednim poście pogrubioną czcionką

Odp: Geany - linker

: 02 paź 2010, 17:43
autor: next_user
no fakt, nie popatrzylem dokladnie, ale mam nstepny problem bo po przeniesieniu pliku do folderu wyskakuje mi komunikat

Kod: Zaznacz cały

g++  `pkg-config gtkmm-2.4 --cflags --libs`  -c  -g -O  main.cc
g++  `pkg-config gtkmm-2.4 --cflags --libs`  -c  -g -O  test/helloworld.cc
g++  main.o test/helloworld.o `pkg-config gtkmm-2.4 --cflags --libs`  -o test2
g++: test/helloworld.o: No such file or directory
make: *** [main] Błąd 1
teraz mam taka strukture

Kod: Zaznacz cały

main.cc
test/helloworld.cc

Kod: Zaznacz cały

CXX=g++ 
CFLAGS=-g -O # tutaj można dodawać inne flagi kompilatora
LIBS= `pkg-config gtkmm-2.4 --cflags --libs` # tutaj można dodawać biblioteki

OBJ=\
    main.o \
    test/helloworld.o

all: main

clean:
    rm -f *.o test2
.cc.o:
    $(CXX) $(LIBS) -c  $(CFLAGS) $<

main: $(OBJ)
    $(CXX) $(OBJ) $(LIBS) -o test2

Odp: Geany - linker

: 02 paź 2010, 18:19
autor: dawwin

Kod: Zaznacz cały

CXX=g++ 
CFLAGS=-g -O # tutaj można dodawać inne flagi kompilatora
LIBS= `pkg-config gtkmm-2.4 --cflags --libs` # tutaj można dodawać biblioteki

OBJ=\
    main.o \
    test/helloworld.o

all: main

clean:
    rm -f *.o test2
.cc.o:
    $(CXX) $(LIBS) -c  $(CFLAGS) $< -o $@

main: $(OBJ)
    $(CXX) $(OBJ) $(LIBS) -o test2
Pogrubiony tekst nakazuje zapisać kompilatorowi plik wynikowy w tym samym katalogu i o tej samej nazwie ale z rozszerzeniem .o

Odp: Geany - linker

: 02 paź 2010, 19:02
autor: next_user
wielkie dzięki :)

tylko jeszcze jedno :) nie czysci mi plikow "*.o"

Odp: Geany - linker

: 02 paź 2010, 19:13
autor: dawwin
Zgaduję, że nie czyści tylko tych z katalogu test. Popraw linijkę dotyczącą czyszczenia na następującą

Kod: Zaznacz cały

rm -f *.o test/*.o test2

Odp: Geany - linker

: 02 paź 2010, 19:22
autor: next_user
w ogole nie czyści ;( teraz tez nie czysci