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

标签 scons

我定义了两个库 - 一个是静态的,一个是共享的 - 将使用 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/

相关文章:

python - SCons - 为 CUDA、CORBA 等集成自定义构建器

python - 未使用的变量错误,gem5

macos - 从 OSX 10.6 切换到 10.7 时出现 Scons 编译错误

c++ - 连续运行两次后的 scons 行为

linux - Scons:如何强制重建?

python - 从 SConscript 确定构建目录

python - 如何让 SCons 在 Windows 10 命令行上运行?

python - 未指定目标时显示帮助

c++ - 如何将 Emacs 和 CEDET 与 SCons 一起使用?

scons - .sconsign.dblite文件的作用是什么?