LINUX.ORG.RU

make - взять из contribs бинарь, если он есть

 ,


0

3

Переделываю тупой мейкфайл, который всегда пересобирает библиотеки из гитовых сабмодулей. Надо сделать, чтобы свежесобранные либы ложились в каталог contribs, а если они там уже есть, то чтобы они не пересобирались.

В итоге сделал что-то типа

a/Makefile:
    cd a && ./autogen.sh

a/lib.so: a/Makefile
    make -C a

contrib/a/lib.so: a/lib.so
    mkdir contrib/a
    cp a/lib.so contrib/a/

lib-install: contrib/a/lib.so
    echo installing

Но как я понял из практики, а позже и из документации, при таком конфиге, даже если contrib/a/lib.so в наличии, prerequisites этого файла всё равно будут выполнены, то есть будут сгенерены a/Makefile и a/lib.so. Как красиво и читабельно добиться желаемого?

не делать сабмодули и прочие зависимости на сорцы, зависимости надо тянуть через систему решения зависимостей, очевидно же блджад

anonymous
()

a/Makefile: a/lib.so наверное. a/lib.so в свою очередь должна зависеть от всех своих исходников, чтобы адекватно пересобираться при изменении исходников (c/cpp/h). Ну и дополнительно неплохо бы добавить еще зависимостей у a/Makefile, чтобы вовремя его перегенерировать в случае чего, тут надо на гребаные автотулзы смотреть.

staseg ★★★★★
()

Можно попробовать написать такую строчку:

.SECONDARY: a/Makefile a/lib.so
Только учти, что после этого если contrib/a/lib.so будет существовать, то каким бы устаревшим он ни был, make не будет его пересобирать.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Спасибо. Помогло. А чтобы не использовались устаревшие бинари, будет использоваться сложный путь типа contribs/submodule_name/`git describe --tags`/. Поменялся коммит сабмодуля - получаем пересборку.

Krieger_Od ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.