Как я могу указать целевую библиотеку, определенную в файле SConscript для сборки, вызвав ее родительский SConstruct из командной строки? - PullRequest
0 голосов
/ 30 января 2019

Я определил две библиотеки - одну статическую, одну общую - для создания в подкаталоге «библиотеки» с файлом SConscript.Этот SConscript затем вызывается из SConstruct в родительском каталоге, который старательно собирает обе библиотеки.

D: \ tony \ library \ 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.

Но как я могу указать, что я хочу создать только одну из библиотек (например, greeter.dll) при вызове scons в строке cmd?

Ранее я определил некоторые пользовательские параметры командной строки, используя AddOption для введения некоторого управления потоком, но почему-то это не совсем правильно.

1 Ответ

0 голосов
/ 31 января 2019

Ваш вопрос можно прочитать одним из двух способов:

  • Как выбрать цель для построения, назвав ее в командной строке.
  • Как мне организовать такие вещичто greeter.dll создается по умолчанию, если в командной строке указана цель no .

Если ваш вопрос касается первого случая, вы можете просто назвать путь ксгенерированный файл при вызове SCons.Учитывая ваши файлы, я ожидаю, что это будет выглядеть примерно так: scons libraries\greeter.dll.

Если вы спрашиваете о втором случае, вы можете использовать env.Default("greeter.dll") в вашем SConscript, а затем, когда вы вызываете SCons сбез аргументов он будет построен автоматически.

...