Build-Systeme Teil 3: SCons



  • Ich hab gerade noch eine Frage die ich nicht mit google oder in der Doku finden konnte:

    Wenn ich früher mit g++ `pkg-config gtkmm --cflags --libs` kompiliert habe, wie sieht das in der SConstruct dann aus?
    Also, dass SCons fürs Kompilieren ein `pkg-config gtkmm --cflags` mit dranhängt und beim Linken ein `pkg-config gtkmm --libs`?



  • env = Environment(CCFLAGS = '-O2')
    
    def CheckPKGConfig(context, version):
         context.Message( 'Checking for pkg-config... ' )
         ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
         context.Result( ret )
         return ret
    
    def CheckPKG(context, name):
         context.Message( 'Checking for %s... ' % name )
         ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
         context.Result( ret )
         return ret
    
    # Den check auf pkg-config und gtkmm hab ich auskommentiert
    # Configuration:
    #conf = Configure(env, custom_tests = { 'CheckPKGConfig' : CheckPKGConfig,
    #                                       'CheckPKG' : CheckPKG })
    #if not conf.CheckPKGConfig('0.15.0'):
    #     print 'pkg-config >= 0.15.0 not found.'
    #     Exit(1)
    #if not conf.CheckPKG('gtkmm-2.4 >= 2.6.2'):
    #     print 'gtkmm-2.4 >= 2.6.2 not found.'
    #     Exit(1)
    #
    # Your extra checks here
    #env = conf.Finish()
    
    # Now build:
    
    #Vermutlich kommen hier noch weiter Dateien rein :-D
    sourcelist = Split("""
                            src/main.cpp
                       """)
    
    env.ParseConfig('pkg-config --cflags --libs gtkmm-2.4')
    env.Program('main', sourcelist)
    


  • Danke, klappt!
    Kann man auch noch einstellen, dass --cflags beim build und --libs nur beim linken genommen wird?



  • Bin ich im Moment überfragt, sorry.



  • Ich hab's hingekriegt:

    env.Append(CCFLAGS = '`pkg-config glib-2.0 --cflags`', LINKFLAGS = '`pkg-config glib-2.0 --libs`')
    

    Funktioniert wunderbar, das gute ist, dass man jetzt auch nicht mehr so lange Compilier-Zeilen hat.

    mfg.



  • cool, danke 👍



  • Noch eine kleine Korrektur:

    env.Append(CCFLAGS = '`pkg-config glib-2.0 --cflags`', _LIBFLAGS = ' `pkg-config glib-2.0 --libs`')
    

    Damit funktioniert's auch mit statischen Libraries. Das einzige was mich noch stört ist das Leerzeichen was man an den Anfang von _LIBFLAGS setzen muss.



  • weiß jemand wie ich scons wieder löschen kann??
    bei removescons bekomme ich nur eine Fehlermeldung das das programm zurzeit läuft.



  • Welches OS verwendest du denn?



  • ich verwende WinXP.

    ich hab glaube totalen mist gebaut bei der installation.

    zuerst hab ich es in eine Python installation(2.2) die es schon auf dem system gab installiert. nur da passierte nichts wenn ich scons in der shell eingegeben habe.

    dachte es liegt an Python habe python 2.5 installiert und scons auchnochmal.
    wieder konnte ich scons nicht starten.
    dann habe ich den pfad von python2.5 zum systempfad hinzugefügt.
    dann kannte er den befehl scons, nur leider will er bei mir nun das scons öffnen das ich bei python 2.2 installiert hatte...leck.

    jetzt möchte ich gerne wissen wie ich das scons schön wieder vom rechner entfernen kann.



  • nash35 schrieb:

    ich verwende WinXP.

    ich hab glaube totalen mist gebaut bei der installation.

    zuerst hab ich es in eine Python installation(2.2) die es schon auf dem system gab installiert. nur da passierte nichts wenn ich scons in der shell eingegeben habe.

    dachte es liegt an Python habe python 2.5 installiert und scons auchnochmal.
    wieder konnte ich scons nicht starten.
    dann habe ich den pfad von python2.5 zum systempfad hinzugefügt.
    dann kannte er den befehl scons, nur leider will er bei mir nun das scons öffnen das ich bei python 2.2 installiert hatte...leck.

    jetzt möchte ich gerne wissen wie ich das scons schön wieder vom rechner entfernen kann.

    Wie hast du scons installiert?



  • einfach den aktuellen Win32 installer benutzt



  • nash35 schrieb:

    einfach den aktuellen Win32 installer benutzt

    Dann deinstallierst du in dem du in den Systemsteurungen auf Software gehst und dann SCons rauspickst.



  • damn jetzt taucht es doch in der Systemsteurungen auf.

    Frage, muss man bei SCons noch irgendwas angeben einen Pfad zum compiler(habe VC 2005) oder so?
    so richtig hab ich das mit der idee von scons nämlich noch nicht geblick..



  • nash35 schrieb:

    Frage, muss man bei SCons noch irgendwas angeben einen Pfad zum compiler(habe VC 2005) oder so?
    so richtig hab ich das mit der idee von scons nämlich noch nicht geblick..

    SCons zieht sich den Pfad zum Visual C++ Compiler normalerweise aus den Umgebungsvariablen. Funktioniert denn dies nicht?



  • nun ja ich möchte ein projekt mit scons kompilieren:

    D:\Programmierung\Reflex>scons
    scons: Reading SConscript files ...
    ValueError: list.remove(x): x not in list:
    File "D:\Programmierung\Reflex\SConstruct", line 18:
    'python/SConscript'])
    File "D:\Programmierung\Python25\scons-0.97\SCons\Script\SConscript.py", line
    583:
    return apply(method, args, kw)
    File "D:\Programmierung\Python25\scons-0.97\SCons\Script\SConscript.py", line
    520:
    return apply(_SConscript, [self.fs,] + files, subst_kw)
    File "D:\Programmierung\Python25\scons-0.97\SCons\Script\SConscript.py", line
    245:
    exec _file_ in call_stack[-1].globals
    File "D:\Programmierung\Reflex\python\SConscript", line 58:
    py_files.remove('./genreflex/genreflex-rootcint.py')
    D:\Programmierung\Reflex>

    und das kommt dabei raus?

    hat jemand vielleicht ein anderes test projekt das ich kompilieren kann?



  • Gib bitte mal den Inhalt der SConstruct an.



  • es handelt sich dabei um das Projekt hier
    http://seal-reflex.web.cern.ch/seal-reflex/download.html

    und das ist der inhalt der SConstruct

    from os import curdir
    from os.path import realpath
    
    opts = Options('custom.py')
    
    opts.Add(BoolOption   ('test',    'Set to 1 if tests shall be compiled', 0))
    opts.Add(PathOption   ('prefix',  'The installation directory of Reflex', realpath(curdir)))
    opts.Add(PackageOption('gccxml',  'The >binary< directory of gccxml',     'no'))
    opts.Add(PackageOption('cppunit', 'The >root< directory of CppUnit',      'no'))
    
    env = Environment(options=opts)
    Export('env')
    
    Help(opts.GenerateHelpText(env))
    
    SConscript(['src/SConscript',
                'inc/SConscript',
                'python/SConscript'])
    
    if env['test'] : SConscript('test/SConscript')
    
    env.Alias('install', env['prefix'])
    


  • ihr könnt wohl auch nix damit anfangen, gell?

    mhm ich hab an den Entwickler geschrieben, mal sehen was der dazu sagt.



  • nash35 schrieb:

    ihr könnt wohl auch nix damit anfangen, gell?

    Ne, ehrlich gesagt nicht.


Anmelden zum Antworten