首页 > 解决方案 > 如何通过从命令行调用其父 SConstruct 来指定要在 SConscript 文件中定义的目标库?

问题描述

我已经定义了两个库 - 一个静态库,一个共享库 - 构建在带有SConscript文件的“库”子目录中。然后SConscript从父目录中调用SConstruct它,该目录会努力构建两个库。

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\S构造:

# 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 行上greeter.dll调用时,我如何指定我只希望构建其中一个库(例如)?scons

我之前定义了一些自定义命令行选项AddOption来引入一些流控制,但不知何故感觉不太对劲。

标签: scons

解决方案


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

  • 如何通过在命令行上命名来选择要构建的目标。
  • 如果命令行上没有命名目标,我如何安排greeter.dll默认构建的东西。

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

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


推荐阅读