der informatik
play

der Informatik Moritz Mhlhausen Prof. Marcus Magnor - PowerPoint PPT Presentation

Praktische Aspekte der Informatik Moritz Mhlhausen Prof. Marcus Magnor https://graphics.tu-bs.de/teaching/ss19/padi/ Make, Libraries, and Debugging make, cmake, libraries, gdb, and IDEs https://graphics.tu-bs.de/teaching/ss19/padi/


  1. Praktische Aspekte der Informatik Moritz Mühlhausen Prof. Marcus Magnor https://graphics.tu-bs.de/teaching/ss19/padi/

  2. Make, Libraries, and Debugging make, cmake, libraries, gdb, and IDEs https://graphics.tu-bs.de/teaching/ss19/padi/

  3. Further Reading Warning! The following slides are meant to give you a very superficial introduction. If you want to learn more, have a look at: http://sslabmcs12.weebly.com/uploads/9/2/2/0/9220774/makefiletutorial.pdf http://www.cmake.org/Wiki/CMake http://www.cs.cmu.edu/~gilpin/tutorial http://qt-project.org https://graphics.tu-bs.de/teaching/ss19/padi/

  4. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

  5. Building with Make • Benefits  Makes building your application easy  May define different “targets”  Targets may depend on each other  May contain Macros  Useful even for non-C++ projects (e.g. LaTeX) • Drawbacks  Quickly becomes unwieldy for larger projects https://graphics.tu-bs.de/teaching/ss19/padi/

  6. Building with Make Makefile CXX=g++ CXXFLAGS=-I. – g – std=c++11 EXE=worldbuilder $(EXE): main.o Block.o Sphere.o WorldBuilder.o Vector3D.o $(CXX) $(CXXFLAGS) -o $@ $^ main.o: main.cpp WorldBuilder.h WorldObject.h Block.h Sphere.h $(CXX) $(CXXFLAGS) -c $< Block.o: Block.cpp Block.h WorldObject.h Vector3D.h $(CXX) $(CXXFLAGS) -c $< […] Vector3D.o: Vector3D.cpp Vector3D.h $(CXX) $(CXXFLAGS) -c $< clean: rm -f *.o *~ $(EXE) https://graphics.tu-bs.de/teaching/ss19/padi/

  7. Building with Make Makefile CXX=g++ Output value CXXFLAGS=-I. – g – std=c++11 EXE=worldbuilder All input values $(EXE): main.o Block.o Sphere.o WorldBuilder.o Vector3D.o $(CXX) $(CXXFLAGS) -o $@ $^ main.o: main.cpp WorldBuilder.h WorldObject.h Block.h Sphere.h $(CXX) $(CXXFLAGS) -c $< Block.o: Block.cpp Block.h WorldObject.h Vector3D.h $(CXX) $(CXXFLAGS) -c $< First input value (usually *.cpp) […] Vector3D.o: Vector3D.cpp Vector3D.h $(CXX) $(CXXFLAGS) -c $< clean: rm -f *.o *~ $(EXE) https://graphics.tu-bs.de/teaching/ss19/padi/

  8. Building with Make Makefile CXX=g++ CXXFLAGS=-I. – g – std=c++11 EXE=worldbuilder $(EXE): main.o Block.o Sphere.o WorldBuilder.o Vector3D.o $(CXX) $(CXXFLAGS) -o $@ $^ %.o: %.cpp $(CXX) $(CXXFLAGS) -c $< clean: rm -f *.o *~ $(EXE) Pro: Easier to read Con: make does not know header dependencies https://graphics.tu-bs.de/teaching/ss19/padi/

  9. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

  10. Building with CMake • Benefits  Cross-platform “Meta - Make”  Simple Scripting Language  Works on multiple platforms with multiple build systems  Can create Makefile , VS Solutions, Eclipse Projects, …  Can create installer files (.deb, .dmg, .msi) • Drawbacks  You still have to write it by hand https://graphics.tu-bs.de/teaching/ss19/padi/

  11. Building with CMake CMakeLists.txt project(worldbuilder) set(CMAKE_CXX_FLAGS "-g") set(CMAKE_CXX_FLAGS_DEBUG) set(worldbuilder_SOURCES main.cpp Block.cpp Sphere.cpp WorldBuilder.cpp Vector3D.cpp) add_executable(worldbuilder ${worldbuilder_SOURCES}) https://graphics.tu-bs.de/teaching/ss19/padi/

  12. Building with CMake • Create CMakeLists.txt file and a build folder in your current directory. • Move to the build folder and run: cmake .. • If everything worked, run make to compile. • Once Makefile is created, make also checks for updates in CMakeLists.txt . • To clean the cache just delete everything in the build directory and run cmake .. again. https://graphics.tu-bs.de/teaching/ss19/padi/

  13. More Cross-Platform Building • You may also want to try CMake alternatives  QMake (http://qt-project.org)  Ninja (https://martine.github.io/ninja)  Automake (http://www.gnu.org/software/automake)  and many more… • You will have to develop cross-platform a lot! • Learning to develop cross-platform today will save you headaches in the future! https://graphics.tu-bs.de/teaching/ss19/padi/

  14. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

  15. Static libraries (.a/.lib) Static Libraries (.a/.lib) Shared Libraries (.so/.dll) • Benefits: • Benefits:  No need for distributing  Keep your binaries small. additional files.  Can be shared between  No changes after multiple apps. compilation. • Drawbacks: • Drawbacks:  May change after  Increases the file size of compilation. your binary.  Application needs to  Redundancy when used know location of files in multiple applications. during runtime. https://graphics.tu-bs.de/teaching/ss19/padi/

  16. Building Libraries • Treat each library as a separate code project  Store them in separate directories  Use include path ( I ) and link path ( L/l ) flags  Use separate Makefiles • Your main application then needs to know  Which libraries are used? ( -l )  Where are the binaries (.a, .lib, …) stored? ( -L )  Where are the headers (.h) stored? ( -I ) https://graphics.tu-bs.de/teaching/ss19/padi/

  17. Building Libraries CXX=g++ OBJEXPORTPATH=../libobjexport OBJEXPORTLIB=objexport CXXFLAGS=-Wall -I$(OBJEXPORTPATH)/include -g -c LDFLAGS=-L$(OBJEXPORTPATH)/lib -l$(OBJEXPORTLIB) -g EXE=my_application $(EXE): main.o $(CC) -o $@ $^ $(LDFLAGS) main.o: main.cpp $(CC) $(CCFLAGS) $< […] https://graphics.tu-bs.de/teaching/ss19/padi/

  18. CMake and libraries • Find and use external libraries  Define CMAKE_MODULE_PATH  In there, a Find[lib].cmake file contains a script to include the [lib] library.  Use target_link_libraries to link them • Create and use your own library  ADD_LIBRARY(yourlib STATIC ${SOURCE_FILES}) • This week’s materials contain an example for OpenCV using CMake. https://graphics.tu-bs.de/teaching/ss19/padi/

  19. External library: OpenCV • May be installed on your system…  apt-get, rpgm, msi, setup.exe • … or you may build it yourself • You need:  Static or shared library  Header files https://graphics.tu-bs.de/teaching/ss19/padi/

  20. External library: OpenCV INCPATH = -I/usr/include/opencv LIBPATH = -L/usr/lib/ OPTIONS = -lcv -lcvaux -lcxcore -lhighgui -lstdc++ CCFLAGS = -Wall -g EXE=assignment_04 $(EXE): main.o g++ $(LIBPATH) $(OPTIONS) $^ -o $@ main.o: main.cpp g++ $(INCPATH) $(CCFLAGS) -c $< clean: rm -f *.o *~ $(EXE) testsmooth.png https://graphics.tu-bs.de/teaching/ss19/padi/

  21. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

  22. Assertions • Assertions make your application crash… … but in a useful way! #include <cassert> void foo(float probability) { assert(0.0f <= probability && probability <= 1.0f); // do something ... } • Assertions can be easily disabled for release: #define NDEBUG // or use the – DNDEBUG flag with g++ • Code in disabled assertions is not executed! https://graphics.tu-bs.de/teaching/ss19/padi/

  23. Debugging with gdb • gdb let’s you look at your program at runtime.  Variables  Call-stack  Breakpoints & Step-by-Step evaluation • Requires debug symbols: -g https://graphics.tu-bs.de/teaching/ss19/padi/

  24. Debugging with gdb gdb ./our_application (gdb) run our_application: Conifer.cpp:31: virtual std::vector< Quad, std::allocator<Quad> > Conifer::getQuads() const: Assertion 'center.z > 0.0' failed. (gdb) bt #0 raise () from /lib/libc.so.6 #1 in abort () from /lib/libc.so.6 #2 in __assert_fail () from /lib/libc.so.6 #3 in Conifer::getQuads at Conifer.cpp:31 #4 in Estate::getQuads at Estate.cpp:32 #5 in main () at main.cpp:42 (gdb) up #1 in abort () from /lib/libc.so.6 (gdb) up #2 in __assert_fail () from /lib/libc.so.6 (gdb) up #3 in Conifer::getQuads at Conifer.cpp:31 (gdb) display m_size->z 1: this->m_size->z = 0 https://graphics.tu-bs.de/teaching/ss19/padi/

  25. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

  26. Programming with IDEs • IDEs make your life simple  Auto- completion, refactoring, …  Build organization, debugging, …  KDevelop, MS Visual Studio, Xcode , … • Qt Creator  Combines Editor, Compiler, Debugger, …  Coherent user-interface.  Many comfort functions.  Free cross-platform IDE.  Works with or without Qt. • But first, a brief look at QMake … https://graphics.tu-bs.de/teaching/ss19/padi/

  27. Back to building: QMake qttest.pro CONFIG -= qt # We won't be using Qt TEMPLATE = app # We're building an application... TARGET = QtTest # ... and it's called “ QtTest ” # Everything that ends in .h is a header file HEADERS += *.h # Everything that ends in .cpp is a source file SOURCES += *.cpp # Do not use this notation in a bigger project... That’s all! https://graphics.tu-bs.de/teaching/ss19/padi/

  28. Programming with IDEs • Open your .pro file in Qt Creator • Your build tools are in the bottom left corner: You can see the current state of your project: “ Debug ” or “ Release ”. You can run your code, debug your code, and of course build your code https://graphics.tu-bs.de/teaching/ss19/padi/

  29. Outline Make CMake Libraries Debugging with gdb Debugging with IDEs Assignment https://graphics.tu-bs.de/teaching/ss19/padi/

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend