1

ObjectLibraryビルダーの呼び出しは、次のようなオプションの引数を最後に取ることがあります。

Object('hello.c', CCFLAGS='-DHELLO')
Object('goodbye.c', CCFLAGS='-DGOODBYE')

ObjectLibraryおよびSharedLibraryall はそれらの任意のセットを取ることができますか、それとも特定の変数セットに限定されますか? もしそうなら、これは私たちの現在の非常に大規模な SCons ビルドをしばらく保存するはずです。

4

2 に答える 2

2

C/C++ ビルダーは、Construction Variablesと呼ばれる特定の引数のセットを認識します。

これらの変数は、環境で設定するか、質問のようにビルダーを呼び出すときに設定できます。多くの場合、環境に設定する方が簡単なので、ビルダーへの呼び出しが簡単になり、必要な場合にのみ変数を変更します。

次に例を示します。

env = Environment()

# Notice that CPPPATH, CPPDEFINES, LIBS, and LIBPATH dont include the
# compiler flags -I, -D, -l, and -L respectively, SCons will add those
# in a platform independent manner
env.Append(CCFLAGS=['-g', '-O2'])
env.Append(CPPPATH=['some/include/path'])
env.Append(CPPDEFINES=['YOUR_DEFINE'])
env.Append(LIBS=['pthread'])
env.Append(LIBPATH=['some/lib/path'])

# All of these builder calls use the construction  
# variables set on the environment above
env.Object('hello.c')
env.Object('goodbye.c')
env.Program('main.cc')

特定の変数をオーバーライドする場合は、次のようにします。

env.Object('hello.c', CPPDEFINES='HELLO')

または、特定の変数に追加する場合は、1 回の呼び出しで次のように実行できます。

env.Object('hello.c', CPPDEFINES=[env['CPPDEFINES'], 'HELLO'])
于 2014-04-23T05:40:25.003 に答える
0

ブレイディの言ったことはほぼ正しい。ただし、任意の (複数の) Environment() 変数を任意のビルダーの末尾に追加できます。これらは、ビルダーを実行するために使用される OverrideEnvironment() を作成します。

CCCOM の値や、コンパイラを実行するためにコマンド ラインにフィードする変数を変更する場合、これらの変数をビルダー呼び出しに追加すると、何らかの影響があります。

現在のビルダーに影響を与えない変数を指定した場合や、SCons または作成した SCons のビルダーのどこにも定義されていない変数を指定した場合でも、警告やエラーは発生しません。

于 2016-02-05T04:58:55.030 に答える