SCons предоставляет Zip-конструктор для создания zip-файлов из групп файлов. Например, предположим, что мы имеем папку foo
, которая выглядит следующим образом:Как заставить SCons не включать базовый каталог в zip-файлы?
foo/
foo/blah.txt
и создаем почтовый файл foo.zip
из папки foo
:
env.Zip('foo.zip', 'foo/')
Это производит почтовый файл:
$ unzip -l foo.zip
Archive: foo.zip
foo/
foo/foo.txt
Однако предположим, что мы пользуемся баром VariantDir
, который содержит foo:
bar/
bar/foo/
bar/foo/foo.txt
Поскольку мы находимся в VariantDir
, мы по-прежнему использовать ту же команду, чтобы создать файл почтового индекса, даже если он имеет несколько различных эффектов:
env.Zip('foo.zip', 'foo/')
Это создает файл почтового индекса:
$ unzip -l bar/foo.zip
Archive: bar/foo.zip
bar/foo/
bar/foo/foo.txt
Проблема дополнительно bar/
префикс для каждого из файлов в пределах zip. Если это не было SCons, простым решением было бы cd в bar
и вызвать zip изнутри там с чем-то вроде cd bar; zip -r foo.zip foo/
. Однако это странно/сложно с помощью SCons, и, во всяком случае, кажется очень не-SCons-подобным. Есть ли лучшее решение?
Проблема не указав каталог почтовый файл, это каталог, который я хочу добавить ... И нет, у меня нет файла SConscript в каталог. Каталог создается при создании, а затем я хочу закрепить одну из созданных папок на месте. – Xymostech
@ Xymostech, верно, я переформулировал ответ. Я понял, что вы ссылаетесь на файлы/dir, которые нужно добавить в zip. Вместо указания каталога вы можете использовать целевой объект, возвращенный из компоновщика. Если вы включите SConscript, я могу взглянуть. – Brady
Я пытался использовать возврат от строителя, и это все еще не работает. Вот код: https://gist.github.com/2822868 – Xymostech