LINUX.ORG.RU

В GNU make это уже есть в implicit rules.  Просто скомандуй make <что угодно> без всякого Makefile.

$ cp ~/hello.c .
$ ls
hello.c
$ make hello
cc     hello.c   -o hello
$ ./hello
Hello, world!
$ gcc -S hello.c
$ rm hello hello.c
$ ls
hello.s
$ make hello
cc    hello.s   -o hello
$ ./hello
Hello, world!

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

Мне бы хотелось контролировать каждый шаг =)

Вот как для метапоста:
#!/bin/bash

set -e
set -u

MPOST='mpost -tex=latex -halt-on-error'
MPTOPDF='mptopdf'

mpfile=$1
base=$(echo "$mpfile" | sed 's,\.\w*$,,')
if ! echo $mpfile | grep '\.\w*$'; then
    mpfile="${mpfile}.mp"
fi
type='pdf'

shift

picnum="$@"
allpic=$(grep beginfig "$mpfile" | grep -o '[0-9]*')

if [ -z "$picnum" ]; then
    picnum=$allpic
fi

for pic in $picnum; do
    if ! echo "$allpic" | grep -w "$pic" > /dev/null; then
        echo "$pic: no such picture in $mpfile"
        exit 1
    fi

    if [ ! -f "${base}.${pic}" ] || [ "$mpfile" -nt "${base}.${pic}" ]; then
        echo "$mpfile -> ${base}.${pic}"
        $MPOST "$mpfile" > /dev/null \
        || cat "${base}.log"
    fi

    if [ ! -f "${base}-${pic}.${type}" ] || [ "${base}.${pic}" -nt "${base}-${pic}.${type}" ]; then
        echo "${base}.${pic} -> ${base}-${pic}.${type}"
        $MPTOPDF "${base}.${pic}" > /dev/null
    fi
done
exit 0

ip1981 ☆☆
() автор топика
Ответ на: комментарий от ip1981

Я, к сожалению, ничего не знаю про matapost, но базовый мейкфайл, который вам нужно доработать, выглядит так (*.foo --> *.bar --> *.baz):

%.bar: %.foo
	cat $< > $@
	echo "hi #1" >> $@

%.baz: %.bar
	cat $< > $@
	echo "hi #2" >> $@


$ cat > file123.foo
hi foo!
$ make file123.baz
cat file123.foo > file123.bar
echo "hi #1" >> file123.bar
cat file123.bar > file123.baz
echo "hi #2" >> file123.baz
rm file123.bar
$ cat file123.baz
hi foo!
hi #1
hi #2

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

В том-то и дело, что не тникаких расширений

Пока так, но работает через раз:
%.o: %.s Makefile
	$(AS) $(AS_OPT) $< -o $@

%: %.o Makefile
	$(LD) $< -o $@

ip1981 ☆☆
() автор топика
Ответ на: комментарий от anonymous

> В GNU make это уже есть в implicit rules. Просто скомандуй make <что угодно> без всякого Makefile.

ЕМНИП, это built-in rules. А implicit - это "с процентами", то бишь как раз то, что стоило посоветовать :) И вроде бы это даже не гнутое расширение.

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

> ЕМНИП, это built-in rules. А implicit - это "с процентами"

Действительно, спутал названия :)

anonymous
()
Ответ на: комментарий от const86

Если я удалю gcd и gcd.o, то:
# make gcd
cc    gcd.s   -o gcd
/tmp/ccwMNo2H.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i486-slackware-linux/4.2.4/../../../crt1.o:(.text+0x0): first defined here
/usr/lib/gcc/i486-slackware-linux/4.2.4/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [gcd] Ошибка 1


А по шагам:
# make gcd.o
as --gstabs gcd.s -o gcd.o

# make gcd
ld gcd.o -o gcd


Потом можно просто писать  make gcd -- gcd.o пересоберётся
при необходимости. Видимо должен существовать gcd.o

ip1981 ☆☆
() автор топика
Ответ на: комментарий от ip1981

Оба-на!
Надо вызывать make c параметром -r:

# make -r long2str
as --gstabs long2str.s -o long2str.o
ld long2str.o -o long2str
rm long2str.o

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