我定义了两个库 - 一个是静态的,一个是共享的 - 将使用 SConscript
文件构建在“libraries”子目录中。然后从父目录中的 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
定义了一些自定义命令行选项来引入一些流程控制,但不知何故感觉不太正确。
最佳答案
可以通过以下两种方式之一阅读您的问题:
- 如何通过在命令行中命名来选择要构建的目标。
- 如果在命令行上没有指定目标,我该如何安排默认构建
greeter.dll
。
如果您的问题是关于第一种情况,您只需在调用 SCons 时命名生成文件的路径即可。鉴于您的文件,我希望它看起来像 sconslibraries\greeter.dll
。
如果您询问第二种情况,您可以在 SConscript
中使用 env.Default("greeter.dll")
,然后当您调用 SCons 时没有参数它将自动构建。
关于scons - 如何通过从命令行调用其父 SConstruct 来指定要构建的 SConscript 文件中定义的目标库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437993/