[make]

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

[make]

Beitrag von starcow »

Schönen Nachmittag zusammen! :-)

Ich bin dabei mich in make und Makefiles einzuarbeiten, was auch soweit ziemlich gut klappt. Ich arbeite dazu ein Tutorial durch.
Der Tutor führt das ganze auf einer Linuxumgebung für Windwos durch. Ich verwende Win7 und mingw32-make.

Mir fällt jetzt aber auf, dass mein kleiner Test-Build in jedem Fall komplett neu kompiliert wird, auch wenn dies gar nicht nötig wäre.

Code: Alles auswählen

hello-make: main.cpp foo.cpp foo.h
	g++ main.cpp foo.cpp -o hello-make.exe
Ich sehe nicht, wo der Fehler liegen könnte. Das ganze ist ja absolut basal. Beim Tutor meldet make bei einem direkten rebuild, dass alles up-to-date sei. Bei mir nicht. Das Änderungsdatum der entsprechenden files ist aber korrekt.

Hat jemand vielleicht eine Idee, an was es liegen könnte?

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Biolunar
Establishment
Beiträge: 154
Registriert: 27.06.2005, 17:42
Alter Benutzername: dLoB

Re: [make]

Beitrag von Biolunar »

Dein Target muss hello-make.exe heißen und nicht nur hello-make.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: [make]

Beitrag von starcow »

Achso! Ja, das macht natürlich Sinn. Da der Tutor unter Linux unterwegs ist, hat er die Dateierweiterung .exe auch nicht - sondern gar keine!

Sonderbar ist nun aber folgendes:

Code: Alles auswählen

hello-make.exe: main.o foo.o
	g++ main.o foo.o -o hello-make.exe

main.o: main.cpp foo.h
	g++ main.cpp -c

foo.o: foo.cpp foo.h
	g++ foo.cpp -c

.PHONY: clean
clean:
	-rm *.o
Edit: Tippfehler bei ".POHNY" dank Schropf behoben.

Jetzt führt er zwar nur noch die Build-Schritte aus, die notwendig sind - jedoch wird das Target "clean" überhaupt gar nicht ausgeführt.
Seltsamerweise kann ich es aber über mingw32-make clean "manuell" problemlos aufrufen, woraufhin die Object-Dateien auch gelöscht werden.
Ich komm nicht dahinter...

Gruss starcow
Zuletzt geändert von starcow am 12.07.2021, 17:12, insgesamt 1-mal geändert.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [make]

Beitrag von Schrompf »

".POHNY" hat wahrscheinlich einen Tippfehler. Weiß aber nicht, ob das der Grund für Dein Problem ist.

Als Entwickler, der praktisch nur auf der Nutzerseite von make stand, würde ich aber erwarten, dass clean nur ausgeführt wird, wenn man es explizit mit make clean verlangt. Ist das also nicht einfach erwartetes Verhalten?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: [make]

Beitrag von starcow »

Danke Schrompf! Du hast natürlich mit beidem recht!
Ich habs mir eben nochmals angeschaut. Leider geht der Tutor tatsächlich nicht darauf ein, dass "clean" in diesem Fall immer manuell aufgerufen werden muss. Im Kontext der Lektion hatte ich dann angenommen, dass immer das ganze Makefile abgearbeitet wird.
Vielen Dank für den Hinweis! :-)
Freelancer 3D- und 2D-Grafik
mischaschaub.com
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: [make]

Beitrag von NytroX »

das "-" vor dem "rm" sieht komisch aus. Und die exe würde ich auch löschen beim clean :-)

Ich würde an deiner Stelle gleich mit einem generischen makefile anfangen, und auch generell nur das nötigste in make machen.
Also so etwa:

Code: Alles auswählen

src = $(wildcard *.cpp)
obj = $(src:.cpp=.o)

CC = g++
CFLAGS = -Wall -Wextra
LDFLAGS = 

hello-make.exe: $(obj)
    $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

.PHONY: clean
clean:
    rm -f $(obj) hello-make.exe
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: [make]

Beitrag von starcow »

Cool, danke für die Tipps NytroX! :-)
Den "-" hat er anscheinend mit reingenommen, um zu verhindern, dass make den Prozess stoppt, falls keine .o Dateien vorhanden sind.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Biolunar
Establishment
Beiträge: 154
Registriert: 27.06.2005, 17:42
Alter Benutzername: dLoB

Re: [make]

Beitrag von Biolunar »

starcow hat geschrieben: 12.07.2021, 17:56 Cool, danke für die Tipps NytroX! :-)
Den "-" hat er anscheinend mit reingenommen, um zu verhindern, dass make den Prozess stoppt, falls keine .o Dateien vorhanden sind.
"-" ist dazu da um Fehler in Befehlen zu ignorieren. Damit rm keinen Fehler zurück gibt, kann man auch -f angeben. Persönlich bevorzuge ich rm -f, statt den Fehler zu schlucken.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [make]

Beitrag von dot »

starcow hat geschrieben: 12.07.2021, 16:03Ich verwende Win7 und mingw32-make.
sry, etwas off-topic aber imho wichtig: Ich hoffe dir ist bewusst dass Windows 7 seit bald eineinhalb Jahren end-of-life ist und du damit seit eineinhalb Jahren keine Updates, insbesondere keine Security Patches mehr bekommen hast. Zumindest würde ich mal davon ausgehen, dass du nicht privat bei Microsoft Kunde für Extended Support bist…

Im Jahr 2021 sollte einfach niemand mehr Windows 7 benutzen. Windows 7 im Jahr 2021 ist nicht nur ein über ein Jahrzehnt altes Betriebssystem, sondern ein über ein Jahrzehnt altes Betriebssystem das seit eineinhalb Jahren keine Sicherheitsupdates mehr bekommen hat. Hier eine Liste mit 135 Sicherheitslücken die allein in diesem Jahr neu gefunden wurden. Letztes Jahr waren es offenbar 386. Das bedeutet, dass in dem Zeitraum in dem du keine Updates mehr bekommen hast mehr als 521 Sicherheitslücken gefunden wurden. Und das sind nur die, von denen wir wissen…

Upgrade auf Windows 10 ist afaik immer noch gratis möglich. Würde ich dir sehr zu Herzen legen…
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [make]

Beitrag von Krishty »

dot hat geschrieben: 13.07.2021, 01:01Upgrade auf Windows 10 ist afaik immer noch gratis möglich. Würde ich dir sehr zu Herzen legen…
Windows 10 würde ich nicht meinen schlimmsten Feinden zu Herzen legen :D

Spaß beiseite. Ich fahre mit der Windows Server-Testversion ganz gut. Kein Cortana, keine Wetterleisten, kein Candy Crush, kein Defender, kein Edge … aber halt ein Bisschen mehr zu konfigurieren.

Mein Offline-Spiele-Rechner ist immernoch Windows 7 und bleibt es auch ❤️ ✊
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [make]

Beitrag von Tiles »

Hm. Kaufst du das auch irgendwann? Legal gesteht dir Microsoft ja nur 6 Monate Testzeit zu.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [make]

Beitrag von Krishty »

Nö, drei Jahre: https://docs.microsoft.com/en-us/answer ... ter-1.html

Wenn die Testversion abläuft, steige ich auf die Testversion von Server 2022 um.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [make]

Beitrag von Tiles »

Nene, sechs Monate. Die "Verlängerung" fällt ja schon unter Hack. Mich wundert nur dass das sogar in einem Microsoft Forum so stehen bleibt :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [make]

Beitrag von Krishty »

Tiles hat geschrieben: 13.07.2021, 11:15Nene, sechs Monate. Die "Verlängerung" fällt ja schon unter Hack. Mich wundert nur dass das sogar in einem Microsoft Forum so stehen bleibt :)
Das OK der Verlängerung kommt von Microsoft über eine Verbindung zum Lizenz-Server. Es funktioniert bspw. nicht, wenn man offline ist.

Ist kein Hack, sondern vorgesehen. Im Gegensatz zu Windows 10 möchte MS den Server-Kunden nicht das System plätten, wenn die irgendwelche Lizenzprobleme haben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten