Как установить библиотеку с другим именем в системе сборки waf? - PullRequest
3 голосов
/ 19 ноября 2011

Я хочу собрать библиотеку с помощью waf, но установить ее под другим именем, нежели имя цели.Кажется, вы можете сделать

bld.shlib(..., install_path='${PREFIX}/lib')

, но мне нужно иметь возможность сделать что-то вроде:

bld.shlib(..., install_as='${PREFIX}/lib/xyz')

Кроме того, bld.install_as () не будет работать, так как это не кажетсяпринять задачу в качестве цели, и я не могу понять, как превратить задачу в узел, представляющий цель, поэтому следующее тоже не работает:

tgt = bld.shlib(...)
bld.install_as('foo', tgt)

Или, наоборот, мне нужновозможность отключить префикс "lib", который автоматически добавляется в имена библиотек, но только для этой библиотеки - не для всех их во время сборки, например что-то вроде:

bld.shlib(..., libprefix='', install_path="${PREFIX}/lib/")

Я знаю, что вы можете установить shlib_PATTERNтакже, но это, похоже, влияет на все библиотеки в текущей среде.У нас довольно сложная сборка, в которой используется много разных сред для одновременной сборки отладки / выпуска, поэтому простое клонирование текущей среды и изменение флага также не работает, поскольку она клонирует среду по умолчанию, а не ту, в которой в конечном итоге будет построена цельпод (потому что мы клонируем цели для каждой среды во время сборки).

Есть мысли?Спасибо!

Ответы [ 2 ]

7 голосов
/ 10 февраля 2012

Вы можете сделать это:

hello_lib = bld.shlib(
       includes='/usr/include/python',
       source='a.cpp',
       target='hello',
       uselib='BOOST_PYTHON',
       vnum='0.0.1')
hello_lib.env.cxxshlib_PATTERN = '%s.so'

Этот код изменяет шаблон именования только для одной задачи.

1 голос
/ 26 января 2012

Есть два ключевых аргумента, которые вы можете использовать: «имя» и «цель».«target» - это имя файла, создаваемого, а Name - имя цели при использовании аргумента «--target».Запутывает, но вот пример:

<code>bld(features=['cxx','cxxshlib'],
    source=src,
    includes=inc,
    target='OutputName',
    name='NameOfTarget',
    use=libs,
    install_path='${PREFIX}/lib/MyLibs
    )
waf configure build install --target=NameOfTarget --prefix=/home/Brian 

Это создает общую библиотеку "libOutputName.so" и устанавливает ее в / home / Brian / lib / MyLib

...