Wpis z mikrobloga

#naukaprogramowania #programowanie #cpp #linux

kiedyś widziałem Makefile, który sprawdzał które pliki zedytowałem, robił ich pliki z rozszerzeniem .o, i linkował w jeden plik do odpalenia. Pozwalało to nie kompilować na nowo plików których nie zmieniałem, co oszczędzało kupę czasu. Jak taki plik napisać?

Mój aktualny makefile:
CC=g++
LINKERFLAGS=-lSDL2 -lSDL2gfx -lSDL2image
COMPILERFLAGS=-Wall -pedantic -Wextra -g -std=c++20
INPUT=src/main.cpp src/Engine/Engine.cpp src/Object/Object.cpp src/functions.cpp
OUTPUT=Output/Game

target:
$(CC) $(INPUT) $(LINKERFLAGS) $(COMPILERFLAGS) -o $(OUTPUT)
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@RedveKoronny: Po nazwie targetu po dwukropku wpisujesz nazwy plików źródłowych i make sobie sam sprawdza daty, czy nowszy i odpalić dla niego

target: file.cpp
Chyba zadziała jak wpiszesz po prostu tą zmienną $(INPUT) tam
  • Odpowiedz
@RedveKoronny: 1. Potrzebujesz wpis, który skompiluje pliki .o jeśli zmieniły się pliki .cpp:
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -c
2. Warto skorzystać z opcji MMD, bo plik cpp mógł zostać bez zmian, ale mogły się pozmieniać pliki nagłówkowe .h
3. W linijce "target:" dodajesz zależność od składowych obiektów .o
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@RedveKoronny: dlaczego? Właśnie ta funkcjonalność oferuje cmake. Jak mu podasz listę plików to sam będzie kontrolować czy są jakieś zmiany. Bez sensu klepac samemu całego makefile z podziałem na etapy budowania. To samo oferuje cmake jak mu podasz jako parametr żeby generował makefile
  • Odpowiedz
stare cmake dla mnie jest nieprzyjemne, nowe jest nieco lepsze, natomiast meson wygląda dość zacnie (i też używa ninja jako backendu).
  • Odpowiedz