Scons軟件構建工具

    scons是一個Python寫的自動化構建工具,從構建這個角度說,它跟GNU make是同一類的工具。

    scons就是這樣一個構建工具:你告訴它要做的任務,以及完成這個任務需要的輸入,以及這個任務產生的輸出,怎麼做這個任務(當然其中就包括依賴性分析),就交給工具本身完成。

    scons主要的命令有:

    1. 只有一個 test.c文件,需要編譯成可執行文件。
        創建SConstruct,內容爲:
        Program('test.c')

     2. 只有一個文件,想編譯成object文件。
         Object('test.c')

     3. 有多個.c文件,並想指定生成的程序名:
           Program('program', ['prog.c', 'file1.c', 'file2.c']) 或  Program('program', Glob["*.c"])

     4. SCons還對output file和source file有關鍵字,可以用來指定

             src_files = Split('main.c file1.c file2.c')
             Program(target = 'program', source = src_files)
                   因爲有關鍵字指定,多以可以換前後:
             Program(source = src_files, target = 'program')
     5. 創建庫:
           Library('foo', ['f1.c', 'f2.o', 'f3.c', 'f4.o'])
     6. 建立靜態和動態庫:
          靜態庫:其實使用Library也是建立靜態庫。
          StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
          動態庫:
           SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])

      7. 使用靜態和動態庫:
           使用$LIBS 來指定庫,使用$LIBPATH 指定庫位置。
           Library('foo', ['f1.c', 'f2.c', 'f3.c'])
           Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')

     下面舉例來說明:

       假設我有一個工程,工程目錄如下:

       sconsTest

                   include

                               hello.h

                   src

                               hello.cpp

                   main

                               test.cpp

        在根目錄sconsTest下創建名爲"Sconstruct"的文件,內容如下:

            SConscript(['src/SConstruct','main/SConstruct'])
            obj_files=['main/test.obj','src/hello.obj']
            Program('hello', obj_files)

        在src和main目錄下分別創建"Sconstruct"文件,內容分別爲:

             Object('hello.cpp', CPPPATH=['../include'])

             Object('test.cpp', CPPPATH=['../include'])

        我們只需要在根目錄"sconsTest"下執行"scons",即可生成一個名爲"hello.exe"的可執行文件.

 

 

     在Scons中,還提供了環境變量,共分爲3種環境變量:
        1. External Environment
        2. Construction Environment
        3. Execution Environment

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章