如何通过从命令行调用其父 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 时,它将自动构建。
我已经定义了两个库 - 一个静态的,一个共享的 - 将在 "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 时,它将自动构建。