如何通过从命令行调用其父 SConstruct 来指定要构建的 SConscript 文件中定义的目标库?

How can I specify a target library defined in an SConscript file to be built by calling its parent SConstruct from the command line?

我已经定义了两个库 - 一个静态的,一个共享的 - 将在 "libraries" 子目录中构建,其中包含一个 SConscript 文件。然后从父目录中的 SConstruct 调用此 SConscript,它会勤奋地构建两个库。

D:\tony\libraries\SConscript:

# Define environmental/project constants
CPPPATH = ['../headers']
SOURCES = ['greeter.cxx']

# Inherit the parent environment and update values if necessary.
Import('env')

# Build targets using defined environment variables.
print "Building libraries"
env.StaticLibrary(target = 'lib_greeter.a', source = SOURCES, CPPPATH = CPPPATH)
env.SharedLibrary(target = 'greeter.dll', source = SOURCES, CPPPATH = CPPPATH)

D:\tony\SConstruct:

# Define environmental/project constants
TOOLS = ['gcc', 'g++', 'gnulink', 'ar']
PATH = ['C:/cygwin/bin']
CYGWIN = ['nodosfilewarning']
DECIDER = 'MD5-timestamp'   # Use a combination of timestamps and checksums to decide if dependencies have changed.

# Initialize the Default Environment and update values.
env = DefaultEnvironment(tools=TOOLS)
env['ENV']['PATH'] = PATH
env['ENV']['CYGWIN'] = CYGWIN
env.Decider(DECIDER)

# Call subsidiary SConscript files with defined environment variables.
SConscript('libraries/SConscript', exports = 'env', duplicate = 0) # do not copy src files to build directory.

但是,在 cmd 行上调用 scons 时,如何指定我只希望构建其中一个库(例如 greeter.dll)?

我之前使用 AddOption 定义了一些自定义命令行选项以引入一些流量控制,但不知何故感觉不太正确。

您的问题可以通过以下两种方式之一阅读:

  • 如何select通过在命令行命名目标来构建它。
  • 如果在命令行中指定 no 目标,我该如何安排以默认构建 greeter.dll

如果您的问题是关于第一种情况,您可以在调用 SCons 时指定生成文件的路径。根据您的文件,我希望它看起来像 scons libraries\greeter.dll.

如果您问的是第二种情况,您可以在 SConscript 中使用 env.Default("greeter.dll"),然后当您调用不带参数的 SCons 时,它将自动构建。