1.) Что такое опция -g для gcc?
Создать информацию для отладки
2.) Что такое $ * и $ @
$*
является основой правила. Когда вы делаете правило, как
%.ext: %.otherext
ext2otherext --input $? --output $@ --logfile $*.log
, и правило пытается сделать file.ext
из file.otherext
, затем в журнал переходит к file.log
$@
- целевое имя файла (file.ext
в случае выше).
3.) Как узнать, как выполнить последнюю цель?
Это загадка.
$*
используется для файлов-посредников: например, когда вы пытаетесь сделать %.so
из %.c
, вам понадобится посредник %.o
, который не является ни целью, ни источником. Вы положили:
%.so: %.c
gcc -fPIC -g -c -o $*.o $?
ld -shared -o $@ $*.o
Другими словами, в %.extension
правиле $*
- это все, кроме .extension
.
В качестве цели $*
не имеет смысла.
Вы уверены, что это правило где-то выполняется? Когда я пытаюсь воспроизвести его, используя ваш Makefile, он применяет правила по умолчанию (cc -o
) вместо gcc -g -o
Правило, которое вам нужно, похоже:
%: %.c
gcc -g -o $@ $?