Oprogramowanie i wykorzystanie stacji roboczych Wykład 1

Transkrypt

Oprogramowanie i wykorzystanie stacji roboczych Wykład 1
Oprogramowanie i wykorzystanie
stacji roboczych
Wykład 1
Dr inż. Tomasz Olas
[email protected]
Instytut Informatyki Teoretycznej i Stosowanej
Politechnika Cz˛estochowska
Wykład 1 – p. 1/2
Plan wykładów
Wybrane narz˛edzia wspomagajace
˛ proces tworzenia
oprogramowania
Podstawy systemu X Window
Biblioteka Qt
Tworzenie grafiki trójwymiarowej na przykładzie blioteki OpenGL
Programowanie wielowatkowe
˛
Poprawa wydajności oprogramowania
Wykład 1 – p. 2/2
Literatura
N. Matthew, R. Stones: Zaawansowane programowanie w systemie
Linux, Helion, 2002.
D. Solin: Poznaj programowanie przy u|yciu biblioteki Qt w 24
godziny, Infoland, 2001
www.trolltech.com.
J. D. Folley i inni: Wprowadzenie do grafiki komputerowej, WNT.
R. S. Wright jr, M. Sweet: OpenGL ksiega
˛
ekperta. Helion, 1999
P. Andrzejewski, J. Kurzak: Wprowadzenie do OpenGL, Kwantum
2000.
Witryna internetowa projektu OpenGL: www.opengl.org.
B. Lewis, D. J. Berg: Multithreaded Programming with Pthreads, Sun
Microsystems Press, 1998.
B. Nichols, D. Buttlar: Pthreads Programming, O’Reilly„ 1996.
Wykład 1 – p. 3/2
Konkurs programistyczny
Adres strony www konkursu: www.power.com.pl/pl/konkurs
Wykład 1 – p. 4/2
Konstrukcja wielomodułowa programów
Zapewnia logiczna˛ strukture˛ i poprawia czytelność programu.
Niezależne moduły moga˛ być oddzielnie testowane i po kompilacji
wykorzystywane w różnych programach.
Umożliwia wykorzystywanie w programie w jezyku
˛
C/C++ procedur
napisanych w innych jezykach
˛
programowania.
Zwieksza
˛
szybkość kompilacji w trakcie modyfikowania programu.
Wykład 1 – p. 5/2
Make
Make jest narz˛edziem automatycznie określajacym,
˛
które fragmenty
kodu wymagaja˛ ponownej kompilacji i wykonuje ich kompilacje.
˛
Plik makefile (Makefile) - opisuje relacje pomiedzy
˛
plikami w
projekcie oraz polecenia służace
˛ do uaktualniania poszczególnych
plików.
wywołanie:
make
make -f makefile_name
make nazwa_reguly
Reguły, dyrektywy i definicje makr powinny rozpoczynać sie˛ w
pierwszej kolumnie tekstu, natomiast polecenia musza˛ być
poprzedzone co najmniej jednym znakiem pustym.
Wykład 1 – p. 6/2
Make - reguły
Reguły (rules) opisuja˛ kiedy i w jaki sposób należy „odświeżać” pliki.
Można rozróżnić dwa rodzaje reguł:
Reguły jawne:
zbiór_uakt [zbiór_uakt [...]]: {{ścieżki}][zbiór-uzal ...]
polecenie
przykład:
foo.o : foo.c defs.h
gcc -c -g foo.c
Reguły niejawne:
[katalog_źródł]\%.rozsz_źródł: [katalog_docelowy]\%.rozsz_docelowe:
polecenie
przykład:
%.o: %.c
gcc -c $<
Wykład 1 – p. 7/2
Make - makrodefinicje
Definicja:
nazwa_makrodefinicji=tekst_rozwini˛
ecia
przykład:
PROGRAM=bierki
OBJS=foo.c
Rozwiniecie:
˛
$(nazwa_makrodefinicji)
przykład:
$(PROGRAM): $(OBJS)
g++ -c $(OBJS) -o $(PROGRAM)
Wykład 1 – p. 8/2
Make - makrodefinicje predefiniowane
$* - makro to rozwija sie˛ w nazw˛e zbioru uzależniajacego
˛
(ze
ścieżka˛ dostepu,
˛
lecz bez rozszerzenia),
$< - działa tak jak $*, z ta˛ różnica,˛ że uzyskana nazwa zbioru
zawiera rozszerzenie,
$@ - rozwija sie˛ w nazw˛e zbioru uzależnianego (wraz z jego
rozszerzeniem),
$: - rozwija sie˛ w ścieżk˛e dostepu
˛
do zbioru, ale bez jego nazwy.
Jeśli wystepuje
˛
w regułach jawnych, to uzyskana zostanie ścieżka
zbioru docelowego, w niejawnych zaś ścieżka zbioru
przetwarzanego.
Wykład 1 – p. 9/2
Make - przykład
PROJECT = bierki
INC
=
./include
INSTALLBIN = $(HOME)/opt/bin
CXX = g++-2.95
CXXFLAGS += -I$(INC)
OBJS = $(PROJECT).o okno.o
all: $(PROJECT)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(PROJECT): $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
clean:
-rm -rf *.o
realclean: clean
-rm -rf $(PROJECT)
Wykład 1 – p. 10/2
Make - automatyczne generowanie zależności
Kompilator gcc posiada opcje -M, -MM, które generuja˛ zależności od
plików nagłówkowych dla przetwarzanego pliku źródłowego.
Przykład:
depend:
$(CXX) -MM $(CXXFLAGS) *.cpp > depend.mk
...
include depend.mk
Przykład wygenerowanych zależności:
domain.o: src/domain.cpp include/domain.h include/fxdrstream.h \
include/except.h
fxdrstream.o: src/fxdrstream.cpp include/fxdrstream.h
mpi_wrapper.o: src/mpi_wrapper.cpp include/mpi_wrapper.h
Wykład 1 – p. 11/2
Make - reguły standardowe
Istnieje zbiór reguł, których stosowanie powoduje, że pliki makefile sa˛
znacznie prostsze do zrozumienia i stosowania:
all,
test,
clean,
dist,
distclean,
realclean,
install,
uninstal.
Wykład 1 – p. 12/2
Narzedzia
˛
wspierajace
˛ program make
makedepend - służy do automatycznego generowania zależności
pomiedzy
˛
plikami w projekcie (dostarczany razem z systemem X
Window),
Imake - służy do mechanicznego generowania plików makefile dla
systemu X. Opiera sie˛ na wywołaniu programu makedepend,
autoconf - generuje skrypt powłoki configure dopasowany do
projektu,
automake - narz˛edzie podobny do autoconf - umożliwia
generowanie plików makefile, posiadajacy
˛ jednak wbudowane
mechanizmy badania zależności (podobna˛ do programu Imake),
tmake - narz˛edzie firmy TrollTech pierwotnie utworzone dla biblioteki
Qt, ale może być wykorzystywane również w innych projektach.
Wykład 1 – p. 13/2
GNU Autoconf (I)
Autoconf jest narz˛edziem (zestawem makr M4) służacym
˛
do
generownia skryptów powłoki, które pozwalaja˛ na automatyczne
dostosowanie pakietów oprogramowania (w postaci kodu
źródłowego) do specyfiki wielu różnych systemów operacyjnych.
Wygenerowane skrypt konfiguracyjny (configure) jest niezależny
od narz˛edzia Autoconf i podczas kompilacji pakietu nie jest ono
wymagane.
Skrypt configure wykonuje szereg testów majacych
˛
na celu
sprawdzenie, czy i ewentualnie gdzie w systemie znajduja˛ sie˛
narz˛edzia, biblioteki, pliki nagłówkowe niezbedne
˛
do poprawnego
utworzenia programu. Po określeniu środowiska w którym
kompilowany jest program skrypt ten powinien wygenerować
odpowiednie definicje i opcje kompilacji.
Cz˛esto narz˛edzie Autoconf jest stosowany w połaczeniu
˛
z
programami Automake i Autoheader.
Wykład 1 – p. 14/2
GNU Autoconf (II)
Szczególnie ważna˛ kwestia˛ przy tworzeniu plików wejściowych dla
programu Autoconf jest określenie, co należy sprawdzać przy
kompilacji programu na różnych platformach systemowych.
Plik konfiguracyjny tworzy sie˛ w oparciu o makra sprawdzajace:
˛
Autoconf zawiera zbiór makr sprawdzajacych
˛
dla teypowych
elementów,
w przypadku braku gotowego testu dla danego elementu (pliku
nagłówkowego, bibilioteki, funkcji) można wykorzystać test
ogólny (np. na obecność pliku w systemie plików),
w ostateczności należy utworzyć fragment testujacy
˛ w jezyku
˛
Bourne shella.
Wykład 1 – p. 15/2
Tworzenie skryptu configure
W celu wygenerowania skryptu configure należy utworzyć plik
konfiguracyjny dla programu Autoconf: configure.ac (lub
configure.in).
Przykładowa struktura pliku configure.ac:
Uworzenie pliku configure nastapi
˛ po uruchomieniu programu
autoconf.
Wykład 1 – p. 16/2
Autoconf - przykład (I)
AC_INIT(sample,0.1)
AC_PROG_CXX
# Checks for performing tests
CPPUNIT="no"
AC_ARG_ENABLE(test, [--enable-test enable test suite [default=yes]],
,enable_test="yes")
if test ! "x$enable_test" = "xno"; then
AC_PATH_PROG(CPPUNIT_CONFIG,cppunit-config,no)
if test "x$CPPUNIT_CONFIG" = "xno"; then
AC_MSG_ERROR([cppunit is needed but not found.])
fi
CPPUNIT="yes"
CPPUNIT_CFLAGS=‘$CPPUNIT_CONFIG --cflags‘
CPPUNIT_LIBS=‘$CPPUNIT_CONFIG --libs‘
AC_SUBST(CPPUNIT_CFLAGS)
AC_SUBST(CPPUNIT_LIBS)
fi
AC_SUBST(CPPUNIT)
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
Wykład 1 – p. 17/2
Autoconf - przykład (II)
Plik Makefile.in:
...
# CppUnit flags
ifeq ($(CPPUNIT), yes)
CXXFLAGS += @CPPUNIT_CFLAGS@
LDFLAGS += @CPPUNIT_LIBS@
endif
$(OBJ)/%.o: $(SRC)/%.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<
$(PROGRAM): $(OBJS)
$(CXX) -o $(PROGRAM) $(LDFLAGS) $(OBJ)
Wykład 1 – p. 18/2
Jam
Jednym z ciekawszych projektów, które w przyszłości moga˛ zastapić
˛
program make jest Jam.
Zalety:
Zwiekszenie
˛
projektu nie prowadzi do tak drastycznego zwiekszania
˛
sie˛ pliku
konfiguracyjnego jak ma to miejsce w przypadku programu make.
Automatycznie generowane sa˛ zależności od plików nagłówkowych.
Jam buduje duże projekty rozmieszczone w wielu katalogach za jednym podejściem,
bez rekursywnego nawracania jak to robi make, śledzac
˛ wszystkie pliki jednocześnie.
Może pracować na wielu procesorach.
Jam jest mały (np. 92 kB), praktycznie nie obciaża
˛ procesora, i nie tworzy dodatkowych
plików (jak np. nmake, SunOS make).
Może być dowolnie konfigurowany poprzez tzw. reguły (Jamrules).
Wykład 1 – p. 19/2
Jam kontra Make
Plik konfiguracyjny dla programu Make:
progam: data.o main.o io.o
gcc data.o main.o io.o -o progam
data.o: data.c
gcc -c data.c
main.o: main.c
gcc -c main.c
io.o: io.c
gcc -c io.c
io.o: io.h
main.o: io.h data.h
data.o: data.h io.h
Plik konfiguracyjny dla programu Jam:
Main progam : data.c main.c io.c ;
Wykład 1 – p. 20/2
Apache Ant (I)
Apache Ant jest cz˛eścia˛ projektu Apache Jakarta.
Opiera sie˛ na podobnym założeniu co make jeżeli chodzi o
zależności i reguły, ale nie zakłada że sa˛ to pliki i że głównym celem
reguł jest uaktualnienie zadań.
Używa jezyka
˛
XML.
Jest w pełni niezależny od platformy.
Został napisany z myśla˛ o Javie, ale posiada również wsparcie do
tworzenia projektu w innych jezykach
˛
programowania (również w
C++).
Ant jest napisany całkowicie w Javie.
Wykład 1 – p. 21/2
Apache Ant (II)
Plik konfiguracyjny dla programu Ant jest plikiem w formacie XML.
Zazwyczaj nosi nazw˛e build.xml.
Składa sie˛ on z różnej ilości różnych tagów, zwanych <target> (cel).
Może to być np. kompilacja, utworzenie archiwum, utworzenie
dokumentacji czy też wysłanie poczty elektronicznej.
Każdy cel składa sie˛ z dowolnej ilości wykonywanych zadań <task>.
Jest to prosta czynność, która bedzie
˛
wykonywana, np. tworzenie
katalogu, kopiowanie pliku, kompilacja kodu źródłowego. Każde
zadanie może posiadać parametry i być zależne od innych zadań.
Wykład 1 – p. 22/2
Apache Ant - przykładowy plik build.xml
<?xml version="1.0" encoding="iso-8859-2"?>
<project name="first" basedir="." default="compile">
<path id="log4jclasspath">
<pathelement location="${basedir}"/>
<pathelement location="/../wspolne.jar"/>
</path>
<target name="compile">
<javac srcdir="."
classpathref="classpath"
/>
</target>
<target name="run">
<java
classpathref=""
classname="org.gridwise.Simple"
/>
</target>
</project>
Wykład 1 – p. 23/2

Podobne dokumenty