3

Scons/Sconstruct を使用して、次のディレクトリ構造を持つプロジェクトをビルドしています。

+A
|--A1
|--A2
+B
|--B1
  |-b1.cpp

'A' ディレクトリには、次の scontruct ファイル (ここで使用するために簡略化されています) に従って、B1 の sconstruct ファイルが参照するコードが含まれています。

env = Environment(CPPPATH=['.', '../../']
source_common = 'A/A1/source.cpp'
env.Program( target = 'b1_exec', source = ['b1.cpp', source_common] )

しかし、コンパイルすると、A/A1/source.cpp が見つからないというエラーが表示されます。CPPPATH パラメーターを追加すると、コンパイラーが source.cpp ファイルを見つけられるようになると思いました。私はぐるぐる回っているように見えるので、助けていただければ幸いです。

ありがとう。

4

1 に答える 1

2

SCons を使用してビルドするときに覚えておくべき最初の規則の 1 つは、ビルドするソース コードがルート レベルの SConstruct スクリプトと同じディレクトリ/サブディレクトリにある必要があるということです。検討できるオプションがいくつかあります。

  1. A と B のルート ディレクトリに SConstruct を配置します。これにより、両方のサブディレクトリの構築が制御されます。

  2. 各ディレクトリ (A と B) を別々のプロジェクトにすると、それぞれに独自の SConstruct があります。次に、プロジェクト B は、プロジェクト A で個別にビルドされたライブラリを参照します。

どちらを選択するかは、プロジェクトの性質と要件によって異なります。オプション 2 の欠点は、A1 または A2 のソース ファイルが変更された場合、プロジェクト B はプロジェクト A のライブラリ/ヘッダーしか認識しないため、プロジェクト B のコンパイル時に検出されないことです。

CPPPATH構成変数について: この変数は、ヘッダー ファイルの場所を構成します。このプロジェクトが Linux (またはその他の Unix バリアント) で gcc/g++ コンパイラを使用している場合、CPPPATH変数は '-I' コンパイラ フラグを構成します。CPPPATH 変数を設定する場合、'-I' フラグを含める必要はありません。SCons はプラットフォームに依存しない方法で追加します (つまり、使用されているプラ​​ットフォームとコンパイラに基づいて設定されます)。

于 2013-11-01T14:52:40.510 に答える