Многое из него, покончили autoconf
. У меня нет учебного руководства в особенности для рекомендации (вне официальной документации), но Вам будет нужно один и именно это Вы хотите искать. "Autoconf" в разговорной речи относится к комплекту инструментов включая, 'автоделают'.
Я не сделал этого некоторое время, но я попытаюсь изобразить схематически процесс из своих примечаний:
Для каждого исходного каталога (не помещают Ваши источники в верхний уровень, помещают их в подкаталоги), необходимо создать a Makefile.am
; это следует правилам для нормального make-файла, но не включает цели компиляции и вместо этого определяет некоторые цели и переменные после схемы именования, характерной для процесса autoconf. Это будет обработано automake
.
На верхнем уровне необходимо создать a configure.ac
файл. autoscan
инструмент может сделать это для Вас, и затем можно настроить его.
Затем необходимо работать в порядке от высокоуровневого каталога: aclocal
, automake -ac
, autoheader
(и возможно automake -ac
снова), затем autoconf
. Они все имеют страницы справочника, которые объясняют их цель.
Престо! Ваш пакет готов.
действительно ли это - твердая вещь изучить это?
Это определенно утомительно, и я не назвал бы его супер легким, нет. Если Ваш проект является маленьким, и Вы только нацелены на конкретные платформы, Вы могли бы просто придумать собственный скрипт проверки зависимости, который может быть запущен от make-файла.
Новые строки без кавычек в командных строках обрабатываются как места; Вот почему вы можете говорить такие вещи, как
command1 && command2
Ну, иногда новые строки без кавычек обрабатываются как точки с запятой. Но когда вы говорите
echo `cat ${log}`
все новые строки в файле журнала превращаются в места. Вы могли бы исправить это, сказав
echo "`cat ${log}`"
, но почему бы просто не сказать
cat ${log}
?
-121--114423- дата
не является bash
builtin. Это системная утилита, которая отличается от OSX и Linux. OSX использует инструменты BSD, а Linux - GNU. Они похожи, но не одинаковы.
Как вы обнаружили, на OSX флаг -d
на date
управляет переходом на летнее время, тогда как в Linux он устанавливает время дисплея. В OSX -v
настраивает дату дисплея, но в Linux флаг -v
является недопустимым.
По большей части BSD и GNU стремятся к совместимости со стандартом POSIX. Если проверить стандарт POSIX для даты
, то вы увидите, что в этом случае это не поможет: он не поддерживает какой-либо синтаксис для корректировки даты.
Если вы хотите, чтобы ваш код работал на обеих платформах, попробуйте:
[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"
Или (требуется bash):
[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"
-121--53520- echo «* file 2» | grep -o ^.
печать *
.
Поскольку у вас есть подстановка команды вне двойных кавычек, она подвергается globbing (a.k.a. подстановочный знак, соответствующий a.k.a. создание имени файла) и разделение слов. Если текущий каталог не пуст, *
расширяется до списка файлов в текущем каталоге. Каждый файл становится одним маркером в команде [
, что, вероятно, является синтаксической ошибкой.
Проблема в том, что вы не использовали двойные кавычки вокруг подстановки команд. Всегда используйте двойные кавычки вокруг подстановок переменных и команд , если у вас нет веской причины опускать их.
if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]
См. Почему сценарий оболочки подавляется пробелом или другими специальными символами? для более подробного объяснения.