Получить имя файла без расширения в makefile
мой make-файл выглядит так:
SRCS = $(wildcard *.asm)
OBJS = ${SRCS:.asm=.o}
# define a suffix rule for .asm -> .o
.asm.o : $(SRCS)
nasm -f elf $<
all: $(OBJS)
gcc -o ?? $<
^need the name of the target without file extension here ($* is blank)
однако, $*
работает в .asm.o
но пуст внутри all
.
Как я могу установить выходное имя файла gcc в имя файла объект file без любой
2 ответов
Я думаю, что вы ищете
.PHONY: all
all: $(patsubst %.o,%,$(OBJS))
%: %.o
gcc -o $@ $<
ваша попытка определит цель all
который зависел от всех объектных файлов, как если бы он содержал их все; я предполагаю, что вы действительно хотите, чтобы каждый объектный файл был независимым, и для all
цель, чтобы зависеть от них всех.
(технически теперь вы можете использовать $*
потому что он идентичен $@
в этом случае, но это просто непонятных.)
это по большому счету изоморфно вашему существующий nasm
правило, за исключением случаев, когда нет суффикса, вы не можете использовать синтаксис суффикса. Другими словами, ваше правило эквивалентно
OBJS = $(patsubst %.asm,%.o,$(SRCS))
%.o: %.asm
nasm -f elf $<
единственная оставшаяся разница-это .PHONY
декларация, которая просто документирует это all
не является именем файла.
Use VAR = $(basename your_file.ext) <=> $(VAR) = your_file
предположим, что вы хотите удалить .o
С test.o
VAR = $(basename test.o)
в результате $VAR
содержащий "тест"