TDP005 Föreläsning 2 Filip Strömbäck
1 Make och CMake 2 Versionshantering
TDP005 Filip Strömbäck 2 Make Problem: kompilera många filer i ett stort projekt tar tid Bättre om vi kompilerar om så få filer som möjligt! Make kan hjälpa oss!
TDP005 Filip Strömbäck 3 Make foo.h # pragma once int foo( int val); main.cpp #include "foo.h" # include <iostream > //... int main() { cout << foo(10) << endl; return 0; } foo.cpp #include "foo.h" int foo( int val) { return val + 1; }
TDP005 Filip Strömbäck 4 Make Beroenden foo.h main.cpp. foo.cpp g++ -std=c++17 -Wall *.cpp -o prog
TDP005 Filip Strömbäck 4 Make Beroenden foo.h main.cpp. foo.cpp prog g++ -std=c++17 -Wall *.cpp -o prog
TDP005 Filip Strömbäck 5 Make Beroenden foo.h main.cpp. foo.cpp g++ -c -std=c++17 -Wall main.cpp -o main.o g++ -c -std=c++17 -Wall foo.cpp -o foo.o g++ -std=c++17 main.o foo.o -o prog
TDP005 Filip Strömbäck 5 Make Beroenden foo.h main.cpp. foo.cpp main.o foo.o g++ -c -std=c++17 -Wall main.cpp -o main.o g++ -c -std=c++17 -Wall foo.cpp -o foo.o g++ -std=c++17 main.o foo.o -o prog
TDP005 Filip Strömbäck 5 Make Beroenden foo.h main.cpp. foo.cpp main.o foo.o prog g++ -c -std=c++17 -Wall main.cpp -o main.o g++ -c -std=c++17 -Wall foo.cpp -o foo.o g++ -std=c++17 main.o foo.o -o prog
TDP005 Filip Strömbäck 6 Make makefil Första försök: prog: foo.o main.o g++ -std=c++17 -g -Wall foo.o main.o -o prog foo.o: foo. cpp foo.h g++ -c -std=c++17 -g -Wall foo. cpp -o foo.o main.o: main. cpp foo.h g++ -c -std=c++17 -g -Wall main. cpp -o main.o
TDP005 Filip Strömbäck 7 Make makefil Förbättring: CXXFLAGS = -std=c++17 -g -Wall prog: foo.o main.o g++ $( CXXFLAGS) foo.o main.o -o prog foo.o: foo. cpp foo.h g++ -c $( CXXFLAGS) foo. cpp -o foo.o main.o: main. cpp foo.h g++ -c $( CXXFLAGS) main. cpp -o main.o
TDP005 Filip Strömbäck 8 Make makefil med.phony och clean CXXFLAGS = -std=c++17 -g -Wall prog: foo.o main.o g++ $( CXXFLAGS) foo.o main.o -o prog foo.o: foo. cpp foo.h g++ -c $( CXXFLAGS) foo. cpp -o foo.o main.o: main. cpp foo.h g++ -c $( CXXFLAGS) main. cpp -o main.o. PHONY: clean clean: rm *.o prog
TDP005 Filip Strömbäck 9 Make Finns mycket mer: makron, variabler, etc. Se make-laborationen för mer info.
TDP005 Filip Strömbäck 10 CMake CMakeLists.txt: project( prog) set( CMAKE_CXX_STANDARD 17) # set( CMAKE_CXX_FLAGS "${ CMAKE_CXX_FLAGS} -std=c++17") set( SOURCE_FILES main. cpp foo. cpp foo.h) add_executable( prog ${ SOURCE_FILES}) Kompilera: $ cmake. $ make
1 Make och CMake 2 Versionshantering
TDP005 Filip Strömbäck 12 Git Git ska användas i kursen Interaktiv genomgång: http://learngitbranching.js.org/ Hur används Git i större projekt?
TDP005 Filip Strömbäck 13 GitLab Issues GitLab har inbyggt stöd för issues. Kan användas för att hålla koll på vad som ska göras härnäst, buggar, etc. I ett commit-meddelande kan man skriva: fixes #13 Då stängs automatiskt issue #13, och en referens till den commit som stängde den läggs till.
TDP005 Filip Strömbäck 14 Git Hur organiseras koden i större projekt? Centralt repository Merge Rebase Feature Branch Gitflow Flera repositories Integration-Manager Workflow (Forking Workflow) Dictator and Lieutenants Workflow
TDP005 Filip Strömbäck 15 Git Centralt repository Repository.
TDP005 Filip Strömbäck 16 Git Merge origin/master C0. C1 master
TDP005 Filip Strömbäck 16 Git Merge origin/master C0. C1 F1 F2 master
TDP005 Filip Strömbäck 16 Git Merge origin/master C0. C1 C2 C3 F1 F2 master
TDP005 Filip Strömbäck 16 Git Merge origin/master C0. C1 C2 C3 F1 F2 C4 master
TDP005 Filip Strömbäck 16 Git Merge origin/master C0. C1 C2 C3 F1 F2 C4 master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 F1 F2 master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 C2 C3 F1 F2 master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 C2 C3 F1 F2 F1 F2 Rebase master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 C2 C3 F1 F2 F1 F2 master
TDP005 Filip Strömbäck 17 Git Rebase origin/master C0. C1 C2 C3 F1 F2 master
TDP005 Filip Strömbäck 18 Git Merge och Rebase Enklaste sättet att samarbeta Fungerar bra i mindre projekt Kan inte samarbeta på funktionalitet som ej är klar Risk att master inte fungerar, problem för andra Stor feature, stora merge-konflikter
TDP005 Filip Strömbäck 19 Git Feature Branch master C0.
TDP005 Filip Strömbäck 19 Git Feature Branch feature-c master C1 C2 C3 C0.
TDP005 Filip Strömbäck 19 Git Feature Branch feature-c master C1 C2 C3 C0. F1 F2 F3 feature-f
TDP005 Filip Strömbäck 19 Git Feature Branch Merge Request feature-c master C1 C2 C3 C0. F1 F2 F3 feature-f
TDP005 Filip Strömbäck 19 Git Feature Branch feature-c C1 C2 C3 master C0. M1 F1 F2 F3 feature-f
TDP005 Filip Strömbäck 19 Git Feature Branch feature-c C1 C2 C3 master C0. M1 F1 F2 F3 feature-f Merge Request
TDP005 Filip Strömbäck 19 Git Feature Branch feature-c C1 C2 C3 master C0. M1 M2 F1 F2 F3 feature-f
TDP005 Filip Strömbäck 20 Git Feature Branch Samarbete/backup på ej klara funktionalitet Tydligt var kodgranskning görs master fungerar alltid Continuous Integration Lite mer arbete än tidigare Risk för att funktionalitet tappas bort Risk för stora merges lite funktionalitet i taget
TDP005 Filip Strömbäck 21 Git Gitflow master v0.1 C0. C1
TDP005 Filip Strömbäck 21 Git Gitflow master v0.1 C0. C1 D0 D2 D1 develop feature
TDP005 Filip Strömbäck 21 Git Gitflow master v0.1 C0. C1 release-0.2 D0 D2 D1 develop feature
TDP005 Filip Strömbäck 21 Git Gitflow master v0.1 C0. C1 R0 R1 release-0.2 D0 D2 D1 develop feature
TDP005 Filip Strömbäck 21 Git Gitflow master v0.1 C0. C1 R0 R1 release-0.2 D0 D2 D3 D1 develop feature
TDP005 Filip Strömbäck 21 Git Gitflow v0.1 master v0.2 C0. C1 C2 R0 R1 release-0.2 D0 D2 D3 D1 develop feature
TDP005 Filip Strömbäck 21 Git Gitflow v0.1 master v0.2 C0. C1 C2 R0 R1 release-0.2 D0 D2 D3 D4 D1 develop feature
TDP005 Filip Strömbäck 22 Git Gitflow Release kan testas och färdigställas parallellt med utveckling av ny funktionalitet master visar tydligt alla versioner Enkelt och tydligt att göra hotfix Ännu mer att hålla reda på, namngivning är viktig!
TDP005 Filip Strömbäck 23 Git Integration-Manager (Forks) Fork A Officiellt. repo Ägare
TDP005 Filip Strömbäck 23 Git Integration-Manager (Forks) Fork A Officiellt. repo Fork B Ägare
TDP005 Filip Strömbäck 23 Git Integration-Manager (Forks) Fork A Officiellt. repo Fork B Ägare
TDP005 Filip Strömbäck 23 Git Integration-Manager (Forks) Fork A Officiellt. repo Fork B Ägare Pull Request
TDP005 Filip Strömbäck 23 Git Integration-Manager (Forks) Fork A Officiellt. repo Fork B Ägare Pull Request
TDP005 Filip Strömbäck 24 Git Integration-Manager (Forks). Ägaren har full kontroll på vad som kommer med Pull Requests ger tydlig diskussion och genomgång av ändringar Officiellt repo innehåller få skräpgrenar Alla kommer åt sina ändringar var som helst ifrån Enkelt att tappa bort ändringar Enkelt att hamna efter officiellt repo Onödigt med flera kopior av projektet? Lite krångligare att komma igång
TDP005 Filip Strömbäck 25 Git Dictator and Lieutenants Dictator. Officiellt repo Lieutenant Lieutenant
TDP005 Filip Strömbäck 25 Git Dictator and Lieutenants Dictator. Officiellt repo Lieutenant Lieutenant
TDP005 Filip Strömbäck 25 Git Dictator and Lieutenants Dictator. Officiellt repo Lieutenant Lieutenant
TDP005 Filip Strömbäck 26 Git Dictator and Lieutenants Bra för väldigt stora projekt (Linux) Enskild ägare behöver inte kontrollera allt Lång process att få ändringar accepterade Många personer inblandade
Filip Strömbäck www.liu.se