On 26.03.03 Torsten Werner (email@twerner42.de) wrote:
Am 26. März 2003 schrieb Hilmar Preusse:
Hallo Torsten,
Das habe ich geändert auf cpp-3.0 (weil cpp ein Softlink auf cpp-2.95 ist). Danach funktionierte das Präprozessing nicht mehr.
Was genau funktioniert nicht mehr?
Wenn $(CPP) auf cpp steht, sieht die folgende Compile-Zeile so aus:
g++-3.0 -c -Iinclude -I../UsageEnvironment/include \ -I../groupsock/include -I. -O -DSOCKLEN_T=socklen_t -Wall -DBSD=1 \ Media.cpp
Wenn dort cpp-3.0 steht, liest sich das so:
g++ -c -o Media.o Media.cpp
Der komplette Include-Pfad fehlt. Die durch genMakefile erzeugten Makefiles unterscheiden sich wirklich nur durch diese Zeile.
Wenn ich den Softlink umbiege auf cpp-3.0 und cpp wieder reinschreibe tut es. Feature? Bug?
Ich vermute, dass das Makefile mal $(CPP) und mal direkt cpp verwendet.
Nein.
Moment, ich sehe gerade, wo diese Variable ausgewertet wird. Dort finden sich Konstrukte, wie:
.$(CPP).$(OBJ): $(CPLUSPLUS_COMPILER) -c $(CPLUSPLUS_FLAGS) $< <snip> Media.$(CPP): include/Media.hh include/Media.hh: include/liveMedia_version.hh
Offenbar hat das nichts mit dem Präprozessor zu tun, sondern nur mit der Erweiterung der C++-Source-Files. Offenbar erzeugt er eine generische g++-Zeile, wenn in $(CPP) Blödsinn steht, die natürlich so nicht funktionieren kann. *autsch* Ist es eigentlich so, daß gcc-3.0 grundsätzlich cpp-3.0 aufruft und gcc-2.95 cpp-2.95?
Wäre das nicht ein Fall für /etc/alternatives (Debian stable)?
Nein, die Begründung bleibt dem Leser zur Übung überlassen. ;-)
Daß der Sysadmin frecherweise festlegen kann, welcher Compiler der Default ist. Wenn ich den nicht will, muß ich meine Makefiles anpassen. Was ist daran schlimm?
H.