KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: C Hilfe: No rule to make target...
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe C Experten!

Ich bin gerade dabei, mich in C für die PSP einzuarbeiten.
Ich benutze Ceikors PSP-SDK 1.0, also wohl ein erweitertes MINPSPW, Notepad++ und kompiliere über cmd.

Nun ja, Variablen, Funktionen, Schleifen, if-Abfragen beherrsche ich, ist nichts neues für mich. Hello World hat auch problemlos geklappt.

Nun wollte ich mich an die Umsetzung eines einfachen Menüs nach dem Tutorial auf psp-prgramming bzw. qj.net machen, da da Textausgabe mit genauer Position dabei ist (also nicht nur die Debug-Textausgabe).
Dafür muss man ja nun die graphics.h mit einbinden.

Ich habe also, nachdem das Compilen nicht klappte, einfach alles aus dem Tut reinkopiert, doch es kommt derselbe Fehler:

Code:
make: *** No rule to make target `graphics.o', needed by `hello.elf'.  Stop.


Hier mal die main.c:

Code:
#include <pspkernel.h>
#include <pspcallbacks.h>
#include <pspctrl.h>
#include "graphics.h"

#define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16))

PSP_MODULE_INFO("Menu Example",0,1,1);
Color white = RGB(255,255,255);
Color red = RGB(255,0,0);
Color black = RGB(0,0,0);
char menuItems[10][25] = {
    {"Item 0"},
    {"Start"},
    {"Options"},
    {"Item 2"},
    {"Controls"},
    {"Online Play"},
    {"Item 6"},
    {"Item 7"},
    {"Credits"},
    {"Exit"},
};
int timer,select,foo;
SceCtrlData pad;
int main() {
    initGraphics();
    SetupCallbacks();
    while(1) {
        sceCtrlReadBufferPositive(&pad,1);
        fillScreenRect(white,0,0,480,272);
        timer++;
        for(foo=0;foo<10;foo++) {
            printTextScreen(200,foo*10+70,menuItems[foo],black);
        }
            printTextScreen(200,select*10+70,menuItems[select],red);
            if((pad.Buttons & PSP_CTRL_UP) && (timer > 10) && (select > 0)) {
            select--;
            timer = 0;
        } else if ((pad.Buttons & PSP_CTRL_DOWN) && (timer > 10) && (select < 9)) {
            select++;
            timer = 0;
        }
        flipScreen();
    }
    return 0;
}


Und die Makefile:

Code:
TARGET = menu
OBJS = main.o graphics.o framebuffer.o

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBS = -lpspgu -lpng -lz -lm

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Menu

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak



Vielleicht könntet ihr mir bei der Gelegenheit auch kurz erklären, warum man, wenn man die graphics.h (und damit auch die framebuffer) einbindet, die Objekte in der Makefile hinzufügen muss (also z.B. graphics.o, da ist ja iwo der Fehler)? Wenn ich die pspdebug.h einbinde, ist das doch auch nicht nötig?

Danke schonmal! Wink

MfG Big Grin
uPSP_08

Weil zur grafics.h auch eine grafics.c gehört und aus dem grund gehört die dort rein.
OBJS = main.o graphics.o framebuffer.o

Wie Ceikor schon sagte fehlt hier die graphics.c.
Ah ok, weil die graphics.c dazu gehört.
Aber warum kann ich die .h nicht einfach mit

Code:
#include &lt;graphics.h&gt;

einbinden statt mit "" (wobei ich sie ins selbe Verzeichnis kopieren muss), die liegt doch genau so im include-Verzeichnis wie z.B. die pspdebug.h, die ich auch über die eckigen Klammern include? Genau dann kommt nämlich der oben genannte Fehler.
Wenn ichs mit "" mach und die graphics und framebuffer ins selbe Verzeichnis tue, kommt auch eine Fehlermeldung:

Code:
psp-gcc -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150   -c
-o graphics.o graphics.c
In file included from c:/pspsdk/lib/gcc/../../psp/include/pngconf.h:243,
                 from c:/pspsdk/lib/gcc/../../psp/include/png.h:363,
                 from graphics.c:5:
c:/pspsdk/psp/sdk/include/stdio.h:29: error: static declaration of 'close' follo
ws non-static declaration
c:/pspsdk/lib/gcc/../../psp/include/sys/unistd.h:29: error: previous declaration
of 'close' was here
c:/pspsdk/psp/sdk/include/stdio.h:30: error: static declaration of 'read' follow
s non-static declaration
c:/pspsdk/lib/gcc/../../psp/include/sys/unistd.h:130: error: previous declaratio
n of 'read' was here
c:/pspsdk/psp/sdk/include/stdio.h:31: error: static declaration of 'write' follo
ws non-static declaration
c:/pspsdk/lib/gcc/../../psp/include/sys/unistd.h:175: error: previous declaratio
n of 'write' was here
c:/pspsdk/psp/sdk/include/stdio.h:32: error: static declaration of 'lseek' follo
ws non-static declaration
c:/pspsdk/lib/gcc/../../psp/include/sys/unistd.h:113: error: previous declaratio
n of 'lseek' was here
make: *** [graphics.o] Error 1

Worauf die Meldung verweist, sind doch Dateien, die von der u.a. von der graphics.c eingebunden werden. An denen hab ich doch gar nix verändert...

Also ich werd hier einfach nicht schlau draus.
Bin ich jetzt total blöd!?
Ich hab das PSP-SDK 1.0 mal deinstalliert und MinPSPGW installiert, mit dem kommt dieser Fehler nicht (dafür ein anderer, aber ok...). Dann hab ich MinPSPGW wieder deinstalliert und wieder Ceikors PSP-SDK 1.0 installiert, und es kam wieder der Fehler von oben. Also muss es doch am SDK liegen, oder? Zumal ich doch den Sourcecode einfach nur aus dem Tutorial kopiert hab.
Wäre für eine Lösung des Problems und der oben gestellten Frage sehr dankbar. Wink

greez
Kann es sein das die makefile nicht im Ordner ist?
Das ist nämlich bei mit mal das prob gewesen
Nene, die ist schon drin. Wink
Ach 'tschuldigung, hab den Thread vergessen Wink
Der Compiler war zu alt, den Fehler hatte ich schon unzählige Male Smile
Gut dass du es selber gelöst hast, aber wenn ich den Thread nicht vergessen hätte, hätt ich es dir gleich sagen können Wink
Ist doch kein Problem, danke, dass du nochmal geantwortet hast.
Aber so ganz gelöst ist es ja noch nicht. Heißt das also, dass ich das PSP-SDK 1.0 nicht nehmen sollte? Lieber MinPSPGW oder doch gleich am besten unter Linux alles einrichten?
Und warum kann ich nochmal die graphics.h nicht über

Code:
#include &lt;graphics.h&gt;

einbinden, obwohl sie im include-Verzeichnis liegt?

Referenz-URLs