Du kennst dich mit SCons aus? Der Einstieg fällt nicht leicht. Ich müsste ja dann das jetzt schon vorhandene makefile nach SConstruct konvertieren. Welche Möglichkeiten habe ich da?
EDIT: also ich hab da mal mit angefangen, sieht ja sehr interessant aus, und erscheint mir vom Konzept her auch einfacher, als make. Aber eine Frage kommt mir da in den Sinn... ich möchte meine .o Files woanders liegen haben, als meine .c/.cxx/.cpp Files, genaugenommen in einem Unterordner namens obj. Dazu gibt es ein Kapitel in der SCons Doku, welches irgendwas mit einem SConscript beschreibt. Aber das funktioniert so bei mir irgendwie nicht. Gibt's da 'ne andere Möglichkeit? Mein SConstruct sieht jetzt so aus:
Code:
daemon_env = Environment(CPPPATH=["./cg/"], CCFLAGS=["-DISTSBIOS", "-DNCURSES", "-Wall", "-g"])
nodaemon_env = Environment(CPPPATH=["./cg/"], CCFLAGS=["-DISTSBIOS", "-DNCURSES", "-DNODAEMON", "-Wall", "-g"])
all_list = Split("""main.cxx
PortToSlot.cxx
CBGInfo.cxx
curses.cxx
md5.cxx
CGProcess.cxx
CSysUnit.cxx
CSysUnit_2.cxx
CSysUnit_SF.cxx
Server.cxx
Client.cxx
File.cxx
CInfoServer.cxx
CBroadcastServer.cxx
StringFuncs.cxx
CUTAPipe.cxx
NTPDController.cxx
DateFunctions.cxx
TimeSync/Timer.cxx""")
timesync_list = Split("""TimeSync/TimeSync.cxx
TimeSync/Timer.cxx
TimeSync/RoundTrip.cxx
TimeSync/main_timesync.cpp""")
daemon_list = Split("""CMain.cxx""")
idf_list = Split("""idffile.cxx
util.c
bits.c
blockzip.c
deflate.c
inflate.c
trees.c
idfrec.cxx
omaincgx.c""")
idf_objects = daemon_env.Object(idf_list)
all_objects = daemon_env.Object(all_list)
daemon_objects = daemon_env.Object(daemon_list)
nodaemon_objects = nodaemon_env.Object("CMain_nd.o", "CMain.cxx")
timesync_objects = daemon_env.Object(timesync_list)
Program('ists_tcp', all_objects + daemon_objects + idf_objects, LIBS=['ncurses', 'panel', 'm', 'readline', 'history'])
Program('ists_tcp_nd', all_objects + nodaemon_objects + idf_objects, LIBS=['ncurses', 'panel', 'm', 'readline', 'history'])
Program('timesync', timesync_objects, LIBS=['ncurses', 'panel', 'm', 'readline', 'history'])
im Vergleich zu meinem Makefile ein recht beachtlicher Fortschritt bezüglich Übersichtlichkeit:
Code:
CC= distcc gcc
PP= distcc g++
LFLAGS= -lncurses -lpanel -lm -lreadline -lhistory
CFLAGS= -DISTSBIOS -DNCURSES -Wall -g -I./cg/
DESTFILE = ists_tcp
DESTFILE_NODAEMON = ists_tcp_nd
DESTFILE_TIMESYNC = TimeSync/timesync
LOFILES=
OFILES= obj/main.o \
obj/PortToSlot.o \
obj/CBGInfo.o \
obj/curses.o \
obj/md5.o \
obj/CGProcess.o \
obj/CSysUnit.o \
obj/CSysUnit_2.o \
obj/CSysUnit_SF.o \
obj/Server.o \
obj/Client.o \
obj/File.o \
obj/CInfoServer.o \
obj/CBroadcastServer.o \
obj/StringFuncs.o \
obj/CUTAPipe.o \
obj/NTPDController.o \
obj/DateFunctions.o \
obj/Timer.o
OFILES_D= $(OFILES) obj/CMain.o
OFILES_ND= $(OFILES) obj/CMain_nd.o
OFILES_TS= obj/TimeSync.o \
obj/Timer.o \
obj/RoundTrip.o \
obj/main_timesync.o
FORIDF= obj/idffile.o \
obj/util.o \
obj/bits.o \
obj/blockzip.o \
obj/deflate.o \
obj/inflate.o \
obj/trees.o \
obj/idfrec.o \
obj/omaincgx.o
HFILES= main.h NTPDController.h CGProcess.h CSysUnit.h Client.h File.h Server.h main.h CInfoServer.h defines.h curses.h md5.h CBroadcastServer.h CUTAPipe.h
all: $(DESTFILE) $(DESTFILE_NODAEMON) $(DESTFILE_TIMESYNC)
$(DESTFILE): obj $(OFILES_D) $(FORIDF)
$(PP) -o $(DESTFILE) $(LOFILES) $(CFLAGS) $(OFILES_D) $(FORIDF) $(LFLAGS) $(CONSOLE)
$(DESTFILE_NODAEMON): obj $(OFILES_ND) $(FORIDF)
$(PP) -o $(DESTFILE_NODAEMON) $(LOFILES) $(CFLAGS) $(OFILES_ND) $(FORIDF) $(LFLAGS) $(CONSOLE)
$(DESTFILE_TIMESYNC): obj $(OFILES_TS)
$(PP) -o $(DESTFILE_TIMESYNC) $(LOFILES) $(CFLAGS) $(OFILES_TS) $(LFLAGS) $(CONSOLE)
obj:
- mkdir obj
obj/TimeSync.o: TimeSync/TimeSync.cxx TimeSync/Timer.h TimeSync/TimeSync.h TimeSync/RoundTrip.h TimeSync/main_timesync.h
$(PP) $(CFLAGS) -c TimeSync/TimeSync.cxx -o obj/TimeSync.o
obj/Timer.o: TimeSync/Timer.cxx TimeSync/Timer.h
$(PP) $(CFLAGS) -c TimeSync/Timer.cxx -o obj/Timer.o
obj/RoundTrip.o: TimeSync/RoundTrip.cxx TimeSync/RoundTrip.h
$(PP) $(CFLAGS) -c TimeSync/RoundTrip.cxx -o obj/RoundTrip.o
obj/main_timesync.o: TimeSync/main_timesync.cpp TimeSync/main_timesync.h
$(PP) $(CFLAGS) -c TimeSync/main_timesync.cpp -o obj/main_timesync.o -Wno-deprecated
obj/CMain.o: CMain.cxx main.h version.h
$(PP) $(CFLAGS) -c CMain.cxx -o obj/CMain.o
obj/CMain_nd.o: CMain.cxx main.h version.h
$(PP) -DNODAEMON $(CFLAGS) -c CMain.cxx -o obj/CMain_nd.o
obj/StringFuncs.o: StringFuncs.cxx StringFuncs.h
$(PP) $(CFLAGS) -c StringFuncs.cxx -o obj/StringFuncs.o
obj/PortToSlot.o: PortToSlot.cxx PortToSlot.h
$(PP) $(CFLAGS) -c PortToSlot.cxx -o obj/PortToSlot.o
obj/CBGInfo.o: CBGInfo.cxx CBGInfo.h
$(PP) $(CFLAGS) -c CBGInfo.cxx -o obj/CBGInfo.o
obj/curses.o: curses.cxx
$(PP) $(CFLAGS) -c curses.cxx -o obj/curses.o
obj/md5.o: md5.cxx
$(PP) $(CFLAGS) -c md5.cxx -o obj/md5.o
obj/CSysUnit.o: CSysUnit.cxx CSysUnit.h
$(PP) $(CFLAGS) -c CSysUnit.cxx -o obj/CSysUnit.o
obj/CSysUnit_2.o: CSysUnit_2.cxx CSysUnit.h
$(PP) $(CFLAGS) -c CSysUnit_2.cxx -o obj/CSysUnit_2.o
obj/CSysUnit_SF.o: CSysUnit_SF.cxx CSysUnit.h
$(PP) $(CFLAGS) -c CSysUnit_SF.cxx -o obj/CSysUnit_SF.o
obj/CGProcess.o: CGProcess.cxx CGProcess.h
$(PP) $(CFLAGS) -c CGProcess.cxx -o obj/CGProcess.o
obj/NTPDController.o: NTPDController.cxx NTPDController.h main.h
$(PP) $(CFLAGS) -c NTPDController.cxx -o obj/NTPDController.o
obj/Server.o: Server.cxx Server.h main.h socket.h
$(PP) $(CFLAGS) -c Server.cxx -o obj/Server.o
obj/Client.o: Client.cxx Client.h main.h socket.h
$(PP) $(CFLAGS) -c Client.cxx -o obj/Client.o
obj/File.o: File.cxx File.h
$(PP) $(CFLAGS) -c File.cxx -o obj/File.o
obj/CInfoServer.o: CInfoServer.cxx CInfoServer.h main.h version.h
$(PP) $(CFLAGS) -c CInfoServer.cxx -o obj/CInfoServer.o
obj/CDumpServer.o: CDumpServer.cxx CDumpServer.h
$(PP) $(CFLAGS) -c CDumpServer.cxx -o obj/CDumpServer.o
obj/CBroadcastServer.o: CBroadcastServer.cxx CBroadcastServer.h
$(PP) $(CFLAGS) -c CBroadcastServer.cxx -o obj/CBroadcastServer.o
obj/CUTAPipe.o: CUTAPipe.cxx CUTAPipe.h
$(PP) $(CFLAGS) -c CUTAPipe.cxx -o obj/CUTAPipe.o
obj/DateFunctions.o: DateFunctions.cxx DateFunctions.h
$(PP) $(CFLAGS) -c DateFunctions.cxx -o obj/DateFunctions.o
obj/main.o: main.cxx $(HFILES) version.h main.h
$(PP) $(CFLAGS) -c main.cxx -o obj/main.o
# IDFFILE
obj/idfrec.o: idfrec.cxx idfrec.h
$(PP) $(CFLAGS) idfrec.cxx -c -o obj/idfrec.o
obj/idffile.o: idffile.cxx
$(PP) $(CFLAGS) idffile.cxx -c -o obj/idffile.o
obj/schedule.o: schedule.cxx
$(PP) $(CFLAGS) schedule.cxx -c -o obj/schedule.o
obj/ciop__x_.o: ciop__x_.cpp
$(PP) $(CFLAGS) ciop__x_.cpp -c -o obj/ciop__x_.o
obj/opcb__x_.o: opcb__x_.cpp
$(PP) $(CFLAGS) opcb__x_.cpp -c -o obj/opcb__x_.o
obj/otim__x_.o: otim__x_.cpp
$(CC) $(CFLAGS) otim__x_.cpp -c -o obj/otim__x_.o
obj/omaincgx.o: omaincgx.c
$(CC) $(CFLAGS) omaincgx.c -c -o obj/omaincgx.o
obj/util.o: util.c
$(CC) $(CFLAGS) util.c -c -o obj/util.o
obj/bits.o: bits.c
$(CC) $(CFLAGS) bits.c -c -o obj/bits.o
obj/blockzip.o: blockzip.c
$(CC) $(CFLAGS) blockzip.c -c -o obj/blockzip.o
obj/deflate.o: deflate.c
$(CC) $(CFLAGS) deflate.c -c -o obj/deflate.o
obj/inflate.o: inflate.c
$(CC) $(CFLAGS) inflate.c -c -o obj/inflate.o
obj/trees.o: trees.c
$(CC) $(CFLAGS) trees.c -c -o obj/trees.o
mrproper: clean cleanidf
clean:
- rm $(OFILES) $(OFILES_D) $(OFILES_ND) $(OFILES_TS)
cleanidf:
- rm $(FORIDF)
install:
- killall -9 $(DESTFILE)
- killall -9 $(DESTFILE_NODAEMON)
- killall -9 ladesw.out
- strip --strip-all $(DESTFILE)
- cp $(DESTFILE) /bin
- strip --strip-all $(DESTFILE_NODAEMON)
- cp $(DESTFILE_NODAEMON) /bin
cleanupcg:
- rm /var/ists/fs/* -r
run: $(DESTFILE)
$(DESTFILE)
runnd: $(DESTFILE_NODAEMON)
$(DESTFILE_NODAEMON)
EDIT: Die URL hat sich ein klein wenig verändert, lautet nun so:
http://7eq.ath.cx/repos/ISTS%20BIOS%20TCP/
Btw: @Joghurt: das Telnet Terminal findest du übrigens in der Klasse CInfoServer.
Fast alle Klassen sind als Singletons aufgebaut, da ich in meinem Programm von den meisten Objekten nur jeweils eine einzige programmglobale Instanz benötige.
Lesezeichen