Реализация цели установки с помощью SCons - PullRequest
5 голосов
/ 28 мая 2009

Я пытаюсь настроить систему сборки для создания общей библиотеки MySharedLib и двоичного файла MyBinary , который полагается на MySharedLib . Система сборки должна быть в состоянии установить MySharedLib и MyBinary , когда об этом попросят, и только тогда, когда об этом попросят.

import os.path

env = Environment()
env.Append(CCFLAGS='-g -Wall -ansi -O2')

prefix = '/usr/local'
lib_dir = os.path.join(prefix, 'lib')
bin_dir = os.path.join(prefix, 'bin')
Export('env prefix lib_dir bin_dir')

libMySharedLib = SConscript('libMySharedLib/SConscript')
MyBinary   = SConscript('MyBinary/SConscript')

env.Alias('install', env.Install(lib_dir, libMySharedLib))
env.Alias('install', env.Install(bin_dir, MyBinary))

Когда я запускаю SCons без аргументов командной строки, MySharedLib и MyBinary создаются, но он также пытается их установить. Я хочу, чтобы они устанавливались только тогда, когда я запрашиваю цель install . Я много раз пробовал, читал документы, но не могу понять.

1 Ответ

6 голосов
/ 14 июня 2009

По умолчанию, и когда в сценарии scons цель не указана, scons создает каждую цель в '.'. Вы можете контролировать, какие цели строить по умолчанию с помощью функции Default:

lib = SConscript('libMySharedLib/SConscript')
bin = SConscript('MyBinary/SConscript')

env.Alias('install', env.Install(lib_dir, lib))
env.Alias('install', env.Install(bin_dir, bin))

# By default (scons called with no explicit target), only build bin
Default(bin)

AFAIK, нет никакого способа сказать scons'у ничего строить, хотя я полагаю, вы могли бы создать фиктивную цель.

...