У меня есть библиотека только для заголовка, состоящая из иерархии папок и группы из .hpp
файлов, которые я хотел бы установить. Моя проблема в том, что scons делает не скопируйте папку в папку сборки.SCons: принудительное копирование файлов для копирования файлов
Вот что мой макет каталога выглядит следующим образом:
root
SConstruct
subdir
SConscript
the_lib
subdir_a
header_a.hpp
subdir_b
header_b.hpp
build
(...)
Вот что я делаю в subdir/SConscript
:
all_headers = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, '*.hpp'):
fn = os.path.join(root, filename)
all_headers.append((fn, root))
for f, d in all_headers:
install.AddHeader(f, d)
Я делаю это, чтобы получить имена файлов наряду с их относительными путями, а затем, Я использую установщик, который я нашел в scons wiki на днях.
Наблюдение: all_headers
остается пустым, потому что папка the_lib
не копируется. Я устал subdir_env.Dir('the_lib')
, но ничего не изменил.
После запуска сценария у меня есть the_lib/SConscript
в моей папке build
, но ничего больше. Конечно, я понимаю, что моя файловая система не делает ничего в этом случае.
Может ли кто-нибудь мне помочь?
UPDATE
Единственный выход я нашел, чтобы запустить find -name "*.hpp"
и вставить результат в моей SConscript
. Сейчас работает как прелесть, но поскольку библиотека является внешней (и, возможно, некоторые файлы добавляются или удаляются), я думал о более общем решении без необходимости знать все заголовки по имени.
К сожалению, я не понимаю. Я устал 'Command ('the_lib', 'the_lib', Copy (" $ TARGET "," SOURCE ")), но это создает цикл зависимостей. Я пытался просто переименовать, что работает с файлами, но не с каталогами. Обычная копия ('the_lib', 'the_lib.in') '(так как я переименовал ее, чтобы быть уверенным) ничего не делает, а если источником и объектом являются файлы, то он работает. –
@ wal-o-mat, как насчет этого: Копировать ('dira/theHeader.h', 'dirb/theHeader.h') – Brady
А, прости, я не упоминал, что указание всех файлов заголовков - это * не *, что я хотел закончить с (поэтому fs ходить), но если мне слишком долго нужно делать эту работу, я думаю, что предпочитаю жестко кодировать имена файлов. –