3

やや大規模なソフトウェア プロジェクトの scons を使用してビルド システムの実装に取り​​組んでいます。個々のライブラリとプログラムのコードを独自のディレクトリに分離するディレクトリ構造があります。私たちの既存のメイク システムでは、単一のプログラム ディレクトリで "クリーンにする" ことができ、そのディレクトリ内のソースに関連付けられたファイルのみをクリーンアップします。ただし、「scons -c」を実行すると、プログラムが兄弟(またはいとこ)のディレクトリにある多数のライブラリに依存していることを認識し、それらのすべてのファイルも消去します。これらのライブラリをすべて再構築する必要があり、これには数分かかることがあるため、これは私が望んでいることではありません。

「NoClean()」コマンドで遊んでみましたが、必要な方法で動作しませんでした。コード ベースのサイズとディレクトリ構造の複雑さを考えると、すべてのライブラリのすべてのファイルに NoClean() 行を配置することは現実的に不可能です。

クリーンを実行するときに、現在のディレクトリより上の依存関係を無視するようにsconsに指示する方法はありますか(つまり、scons -c)?

4

2 に答える 2

1

私はこれに自分自身で良い答えをしたいと思っています。

今のところ私が提供できる唯一の解決策は、Noclean を機能させることです。したがって、ライブラリには、次のようなものが必要です

lib_objs = SharedObject(source_list)
mylib = SharedLibrary('libname', lib_objs)

そのため、ライブラリとソースがクリーンアップされないように保護したいと考えています。

NoClean([mylib, lib_objs])

オブジェクト ファイルのビルドをライブラリから分離しなければならなかったことに注意してください。オブジェクト ファイルを NoClean にも渡すことができるようにするためです。

于 2013-10-25T12:39:28.823 に答える
1

クリーニング時にターゲット名を使用してみてください。

scons -c aTargetName

SCons Alias()関数を使用してターゲット名を簡略化し、複数のターゲット名を 1 つのエイリアスにグループ化することもできます。

このアプローチでは、適切なサブディレクトリごとにエイリアスを追加する必要がありますが、これは必ずしも悪いことではありません:)

于 2013-10-24T18:35:10.140 に答える