Forum: Compiler & IDEs Makefile geht nicht


von Transistorfips (Gast)


Lesenswert?

Auf meinem Raspi hab ich:
pi@raspberrypi ~/pwm_stuff/RPIO-master/source/c_pwm $ ls -l
total 96
-rw-r--r-- 1 pi pi  1343 Mar 15  2013 Makefile
-rwxr-xr-x 1 pi pi 29505 Feb 26 14:42 pwm
-rw-r--r-- 1 pi pi 24877 Feb 26 14:45 pwm.c
-rw-r--r-- 1 pi pi  1760 Mar 15  2013 pwm.h
-rw-r--r-- 1 pi pi  7909 Mar 15  2013 pwm_py.c
-rw-r--r-- 1 pi pi 16608 Mar 15  2013 servod.c

Jetzt crunchen:
pi@raspberrypi ~/pwm_stuff/RPIO-master/source/c_pwm $ make
make: *** No rule to make target 'py', needed by 'all'.  Stop.

Warum die Fehlermeldung?



Das ist das makefile:
1
all: pwm py
2
3
pwm:
4
  gcc -Wall -g -O2 -o pwm pwm.c
5
6
py2.6:
7
  mkdir -p build
8
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c pwm.c -o build/pwm.o
9
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c pwm_py.c -o build/pwm_py.o
10
  gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/pwm.o build/pwm_py.o -o _PWM.so
11
  rm -rf build
12
13
py2.7:
14
  mkdir -p build
15
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c pwm.c -o build/pwm.o
16
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c pwm_py.c -o build/pwm_py.o
17
  gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/pwm.o build/pwm_py.o -o _PWM.so
18
  rm -rf build
19
20
py3.2:
21
  mkdir -p build
22
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python3.2mu -c pwm.c -o build/pwm.o
23
  gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python3.2mu -c pwm_py.c -o build/pwm_py.o
24
  gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/pwm.o build/pwm_py.o -o _PWM.so
25
  rm -rf build

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Transistorfips schrieb:
> Warum die Fehlermeldung?

Weil es eben keine Regel gibt, ein Target namens „py“ zu erstellen.
Es gibt Targets „py2.6“, „py2.7“ und „py3.2“, aber eben kein „py“.

von Transistorfips (Gast)


Lesenswert?

Aaah!

Alles klar.

von Markus F. (mfro)


Lesenswert?

Transistorfips schrieb:
> Alles klar.

glaub' ich nicht...

von Ausgeloggt (Gast)


Lesenswert?

Mach erst mal das Makefile ein bisschen besser lesbar. z.B. so:
1
PYTHON=python3.2mu   # ... oder halt python2.6 oder python2.7
2
3
GCC_OPTS=-Wall -g -O2
4
GCC_PY_OPTS=-pthread -fno-strict-aliasing -DNDEBUG -fwrapv -Wstrict-prototypes -fPIC -I/usr/include/$(PYTHON)
5
GCC_LINK_OPTS=-pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro
6
7
all: pwm py
8
9
pwm:
10
    gcc $(GCC_OPTS) -o pwm pwm.c
11
12
py:
13
    mkdir -p build
14
    gcc $(GCC_OPTS) $(GCC_PY_OPTS) -c pwm.c -o build/pwm.o
15
    gcc $(GCC_OPTS) $(GCC_PY_OPTS) -c pwm_py.c -o build/pwm_py.o
16
    gcc $(GCC_LINK_OPTS) build/pwm.o build/pwm_py.o -o _PWM.so

> Alles klar.

Das glaub' ich auch nicht.
Warum compilierst du z.B. pwm.c zweimal? (einmal im make target py, 
einmal im target pwm?

von Transistorfips (Gast)


Lesenswert?

>Warum compilierst du z.B. pwm.c zweimal? (einmal im make target py,
>einmal im target pwm?

Da mußte den fragen der das Makefile geschrieben hat...
Kann schon sein, daß die unterschiedlichen Compileroptionen absichtlich 
unterschiedlichen Code erzeugen... das zweite Kompilat wird Teil eines 
.so Datei.

von Jim M. (turboj)


Lesenswert?

Ausgeloggt schrieb:
> Warum compilierst du z.B. pwm.c zweimal? (einmal im make target py,
> einmal im target pwm?

Ist schwer zu sehen: Eimal ist das Ergebnis ein direkt ausführbares 
Programm "pwm" (kein -c Parameter), einmal nur ein linkbares Object File 
"pwm.o" (mit -c Parameter).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.