создание вариантов библиотеки с помощью scons - PullRequest
2 голосов
/ 30 ноября 2010

У меня есть существующая библиотека C, которая построена с помощью scons (библиотека имеет свою собственную SConscript). Этот код теперь содержит два варианта, управляемых #ifdef s. Как я скажу scons построить два варианта этой библиотеки, которые могут жить бок о бок сторона (чтобы приложения могли ссылаться на соответствующий вариант)?

Концептуально это примерно так:

driver_sources = [ ... ]
env.Library('drivers', driver_sources)

env.Library('drivers_withflag', driver_sources, 
            CPPDEFINES += ['FLAG'])

SCons (понятно) не любит использовать один и тот же список источников для разных выходы с различными средами, потому что имена промежуточных объектов конфликт.

Я не уверен, стоит ли подходить к этой проблеме, получая новый Builder для drivers_withflag объектов, или я должен включить мои библиотеки SConscript дважды с некоторым параметром, чтобы указать #defines (и я мог бы поставить каждый вариант в своем собственном каталоге сборки). Любой совет?

1 Ответ

1 голос
/ 30 ноября 2010

Вот ссылка на соответствующую документацию: http://www.scons.org/doc/1.1.0/HTML/scons-user/x1392.html

Я думаю, что это будет примерно так

driver_sources = [ ... ]

env.Library('libdrivers', driver_sources)

env_flag = env.Clone()

env_flag.Append(CPPDEFINES = ['FLAG'])

flag_objects = [os.path.splitext(src)[0] + '_flag' + 
  env['OBJSUFFIX'] for src in driver_sources]

d_wf = [env_flag.Object(tgt, src) for tgt,src in 
  zip(flag_objects, driver_sources)]

env_flag.Library(d_wf)

Это будет происходить непосредственно внутри вашего текущего файла SConscript, однако вы также можете взглянуть на этот вопрос: здесь

Вы можете использовать описанные там шаги в любом файле, называемом файлом SConscript вашей библиотеки, для настройки двух сред, а затем просто вызывать SConscript дважды для каждой.

Надеюсь, это поможет.

...