2

Я пытаюсь изменить некоторые файлы Autotool, потому что проект не поддерживает мои CFLAGS , CXXFLAGS и LDFLAGS . Я нашел некоторые области, где я мог бы внести изменения с помощью ссылки на grep libtool: link . Когда я настроил файлы Autotool:

$ sed -i "" 's|$CC -dynamiclib|$CC -dynamiclib -force_cpusubtype_ALL|g' configure configure.ac

Это привело к:

WARNING: 'aclocal-1.14' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127

touch -t 19700101 configure.ac не решил проблему.

Я нахожусь на старой системе OS X, и у нее нет инструментов, требуемых инструментами. Я просмотрел man-страницы sed(1), но не вижу возможности сохранить время файла.

Как мне дать команду sed сохранить время файла?

1 ответ1

1

sed вряд ли сделает это в любой реализации. Команда

touch -t 19700101 configure.ac

сообщает touch чтобы установить временную метку на фиктивную дату (потому что даны только 8 цифр), используя

  • MM = 19
  • DD = 70
  • чч = 01
  • мм = 01

Вы, вероятно, намеревались

touch -t 197001010000 configure.ac

(8 цифр для 19700101, плюс еще 4 цифры для 0000), хотя вы можете столкнуться с проблемами часового пояса с этим. В любом случае маловероятно, что необходимо сбросить временную метку файла назад. Я бы просто сбросил его до первоначального значения.

Например (я обычно делаю это с помощью cpd), можно написать скрипт для копирования метки времени из исходного файла в отредактированный файл. Вот пример сценария, который работает для OSX:

#!/bin/sh
usage() {
    echo "usage: $0 source target" >&2
    exit 1
}

[ $# = 2 ] || usage

[ -L "$1" ] && usage
[ -L "$2" ] && usage

[ -f "$1" ] || usage
[ -f "$2" ] || usage

SOURCE=$(stat -t "%Y%m%d%H%M.%S" -f "%Sm" "$1")
ls -l $2
touch -t "$SOURCE" "$2"
ls -l $2

Интересно, что (stat командной строки не стандартизирована), версия stat OSX больше подходит для этого конкретного приложения, чем stat Linux. Для Linux можно сделать нечто подобное, получив метку времени из списка ls -l и используя нестандартную опцию -d touch чтобы применить метку времени.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .