15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SConsことはじめ

Last updated at Posted at 2015-10-15

前準備

あらかじめ、pythonとsconsをインストールしておくこと。

基本的な知識

ここの意訳。適当。

SConstruct

SConsのエントリポイントとなるファイル。プロジェクトのルートディレクトリに配置される。
中身はpythonスクリプト。

SConscript

SConsのスクリプトであるが、プロジェクトのサブディレクトリに配置されるファイル。階層的なビルドに利用される。

Scons Environment

SConsがプロジェクトをビルドする際に作成されるオブジェクト。プロジェクトの依存関係ツリーや、ヘルパー関数、ビルダーなどをもとに作成される自身の環境。
スクリプトからは、単にEnvironmentでアクセスすることができる。

System Environment

PATHHOMEなどの、OSの環境変数を含む。スクリプトからはos.environでアクセスすることができる。

Builder

ソースファイル群から依存するターゲットをビルドするために、明示的に呼び出すオブジェクト。ソースファイルが変更されたとき、何をビルドするべきか自動的に検出する。

Action

外部コマンドを実行したり、pythonの関数を呼び出したりする、呼び出し可能なオブジェクト。Builderは、Actionのリストを保持する。

Node

通常、ファイルやディレクトリなど、ファイルシステムを表現するオブジェクト。

Scanner

ファイル内部から参照されるファイルをスキャンするのに利用されるオブジェクト。

Tool

BuilderScanner、その他ヘルパーを、SConsの環境に追加する外部コンポーネント。

最も簡単なプログラム

Hello Worldを表示させるだけの簡単なプログラム。
hello.cSConstructを作成する。

$PROJ_ROOT
├── hello.c
└── SConstruct

それぞれ、ファイルの内容は以下。

hello.c
#include <stdio.h>

int main(void) {
  printf("Hello world!\n");
  return 0;
}
SConstruct
env = Environment()

env.Program(target='hello', source=["hello.c"])

$PROJ_ROOTで、以下のコマンドでビルドしてみる。

$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o hello.o -c hello.c
gcc -o hello hello.o
scons: done building targets.

ビルドが成功すると、helloが生成される。

$PROJ_ROOT
├── hello <= (*)
├── hello.c
├── hello.o
└── SConstruct

実行してみる。

$ ./hello
Hello world!

ビルドで生成されたファイルは、以下のコマンドでクリーンできる。

$ scons -c

ソースコード

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?