Scons one

SconsはPythonで記述されたコンパイルスクリプトに依存しているため、makefileと比較して使いやすく、makefile構文を覚える必要がありません。

インストール方法:

1 python3をインストールし、

2 sudo python -m pip install sconsを実行します。

 

MakefileがMakefileを必要とするのと同様に、SconsもSconstructファイルを必要とします。コンパイルスクリプトの記述に使用され、構文はpythonと同じです。Sconsが正しくインストールされていることを確認するには、何も書き込まずに新しいSconstructファイルを作成します。Sconstructと同じディレクトリに移動します。ターミナルを開いてsconsを実行します

Sconsが正常にインストールされたことを示す次の印刷が表示されます。

scons:SConscriptファイルを読み込んでいます...

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

scons: `。 ' 最新です。

scons:ターゲットの構築が完了しました。

 

 

テストファイルを書き込むには、test.c

int

メイン()

{

printf( "Hello、world!\ n");

1を返します。

}

 

このようなファイルをコンパイルするには、Sconstructでプログラム( 'test.c')のステートメントが1つだけ必要です。

sconsコマンドを実行します。次の出力が表示されます。実際、実行プロセスはMakefileと同じです。しかし、構文は比較的単純です

scons:SConscriptファイルを読み込んでいます...

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

gcc -o test.o -c test.c

gcc -o test test.o

scons:ターゲットの構築が完了しました。

 

scons -cを実行してすべてのターゲットファイルをクリーンアップします。この効果は、クリーンにすることと同じです。

scons:SConscriptファイルを読み込んでいます...

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットのクリーニング...

test.oを削除

削除されたテスト

scons:ターゲットのクリーニングが完了しました。

 

.oファイルのみを作成したい場合は、コマンドObject( 'test.c')を使用できます。

scons:SConscriptファイルを読み込んでいます...

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

gcc -o test.o -c test.c

scons:ターゲットの構築が完了しました。

 

SConstructの構文はpython形式ですが。ただし、実行の順序はコード内の呼び出しの順序とは異なります。たとえば、次のSConstructファイル

print( "Generate test.c")

プログラム( 'test.c')

print( "Generate test1.c")

プログラム( 'test1.c')

実行結果は次のとおりです。出力内のステートメントが最初に出力され、次にビルドステップが実行されていることがわかります。

scons:SConscriptファイルを読み込んでいます...

test.cを生成する

test1.cを生成する

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

gcc -o test.o -c test.c

gcc -o test test.o

gcc -o test1.o -c test1.c

gcc -o test1 test1.o

scons:ターゲットの構築が完了しました。

 

 

リンクライブラリ:

コード開発では、他のチームまたは既存のモジュールの関数がインポートされることがよくあります。これには、他のオブジェクトファイルへのリンクが必要です。

srcファイルにfunc.oファイルがあります。Funcのコードは次のとおりです。

#include <stdio.h>

void print_in()

{

    printf( "print_info \ n");

}

print_in関数はmain.cで参照されます

#include <stdio.h>

void main()

{

    print_in();

    printf( "hello world \ n");

}

Sconstructスクリプトは次のとおりです

SCons.Scriptインポートから*

scons.SConsからのインポート*

 

env = Environment()

env.Append(LIBPATH = ['./ src'])// LIBPATHを設定し、sconsにライブラリを検索するパスを指示します

env.Program( 'scon_test.c'、LIBS = ['func'])//インポートするLIBSを設定する場合、sconsにどのライブラリを見つけるかを指示します

実行スクリプトは以下の通りです。-Lと-lの設定はgccで設定されます

scons:SConscriptファイルを読み込んでいます...

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

gcc -o scon_test.o -c scon_test.c

scon_test.c:関数 'main':

scon_test.c:7:5:警告:関数 'print_in'の暗黙の宣言; 「printf」の意味ですか?[-Wimplicit-function-declaration]

     print_in();

     ^ ~~~~~~~

     printf

gcc -o scon_test scon_test.o -Lsrc -lfunc

scons:ターゲットの構築が完了しました。

 

同様に、.hヘッダーファイルを別のパスで見つける場合は、CPPATHパラメーターも設定できます。

Var.hはMain.cに含まれています

#include <stdio.h>

#include "var.h"

 

void main()

{

    printf( "var =%d \ n"、para);

    printf( "hello world \ n");

}

 

var.hはincパスの下にあります

#ifndef __var_h__

#3の定義

#define __var_h__

#endif

 

Sconstructファイル。CPPPATHを設定することにより、ヘッダーファイルの場所をsconsに指示できます

SCons.Scriptインポートから*

scons.SConsからのインポート*

env = Environment()

print( "cc =%s"%env ['CC'])

env.Program( 'scon_test.c'、CPPPATH = ['./ inc'])

 

 

実行結果は次のとおりです。-Iを追加すると構成を確認できます

scons:SConscriptファイルを読み込んでいます...

cc = gcc

scons:SConscriptファイルの読み取りが完了しました。

scons:ターゲットの構築...

gcc -o scon_test.o -c -Iinc scon_test.c

gcc -o scon_test scon_test.o

scons:ターゲットの構築が完了しました。

 

おすすめ

転載: www.cnblogs.com/zhanghongfeng/p/12746253.html