Проблема с несовпадением версии aclocal между разными платформами - PullRequest
1 голос
/ 15 октября 2019

Я работаю на нескольких суперкомпьютерах, которые имеют разные версии автоинструментов.

Когда я делаю make после ./configure, некоторые из них выдают мне ошибку о неправильной версии aclocal.

Если я переконфигурирую свой configure.ac на одной платформе, то на другой будет происходить то же самое.

Например, одна платформа даст мне следующее:

CDPATH="${ZSH_VERSION+.}:" && cd . && aclocal-1.15
/bin/sh: aclocal-1.15: command not found
make: *** [aclocal.m4] Error 127

Если бы я запустил autoreconf, он бы работал нормально. Однако, если я использую этот недавно созданный файл configure.ac на некоторых других платформах, они выдадут мне ту же ошибку с другим номером версии:

CDPATH="${ZSH_VERSION+.}:" && cd . && aclocal-1.13
/bin/sh: aclocal-1.15: command not found
make: *** [aclocal.m4] Error 127

Я знаю, что я могу просто запускать autoreconf -fi каждый раз, когда я идуна другой платформе, но я слышал, что не стоит заставлять конечных пользователей делать это, так как от них требуется установка автоинструментов.

У них есть три разные версии, и я не знаю, как это сделать. справиться с этим. Есть ли способы автоматического запуска autoreconf при запуске ./configure для регенерации конфигурации? Или есть лучший подход для решения этой проблемы?

1 Ответ

1 голос
/ 30 октября 2019

Я вижу два основных способа распространения вашего исходного кода на разные суперкомпьютеры:

  1. тарболы, сгенерированные make dist

  2. версия с управлениемисходное дерево

Если вы используете make dist сгенерированные тарболы (случай 1) для распространения вашего исходного кода на разные суперкомпьютеры, вы можете использовать одно единственное исходное дерево, извлеченное из тарбола для всехразные суперкомпьютеры, если дерево исходных текстов строится в разных каталогах для каждого суперкомпьютера.

Если вы используете дерево исходников с управлением версиями (случай 2) как для разработки исходного кода, так и для его распространения вразные суперкомпьютеры, у вас есть два варианта:

сохранить сгенерированные файлы make dist внутри контроля версий

оставить все сгенерированные файлы вне контроля версий

Если вы сохранитеmake dist сгенерированные файлы внутри системы контроля версий (случай 21), каждый autoreconf запускается на машине, отличной от той, на которой были сгенерированы эти файлы, будет генерироваться измененный набор сгенерированных файлов, и, следовательно, изменения в файлах без фактических необработанных изменений,Таким образом, в этом случае вам нужно определить единую систему, в которой вы все работаете над разработкой, которая касается системы сборки. Все остальные системы могут заниматься разработкой только внутри исходного кода. Затем вы можете использовать одно дерево версий, управляемое одной версией, на всех разных суперкомпьютерах.

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

В эпоху распределенных систем контроля версий, таких как git, этот вариант (случай 22) был бы моим предпочтительным вариантом.

...