2015-06-11 4 views
1

У меня возникли проблемы с созданием файла makefile для библиотеки в nasm, так как это требует, чтобы вы запускали nasm с одним входным файлом за раз. Я пробовал использовать% .o:% .s, но я, вероятно, делаю это неправильно, так как он не работает. Вот что у меня есть:NASM: Makefile для библиотеки

NAME = libfts.a 
SRC_ASM = file1.s \ 
     file2.s \ 
     file3.s \ 

OBJ_ASM = $(SRC_ASM:.s=.o) 
FLAGS = -Wall -Werror -Wextra 
CC_ASM = nasm 
ASM_FLAGS = -f macho64 

all :  $(NAME) 

$(NAME) : $(OBJ_ASM) 
    @ar rc $(NAME) $(OBJ_ASM) 
    @ranlib $(NAME) 

#$(OBJ_ASM) : $(SRC_ASM) 
# nasm -f macho64 -o $(OBJ_ASM) $(SRC_ASM) 

%.o : %.s 
    nasm $(ASM_FLAGS) -o [email protected] $< 

clean: 
    rm -f *.o main.o 

fclean : clean 
    rm -f libfts.a 

re : fclean all 

.PHONY: clean fclean re 

Я пытался комментировать и раскомментировать комментируемой части, движущиеся вещи вокруг, но ничего, кажется, работает для меня :(

Сейчас я получаю ar: no archive members specified Другие ошибки я включил as работает вместо nasm и только 1 файл в SRC_ASM спасибо :)

ответ

2

ниже, кажется, работает хорошо для меня:

NAME = libfts.a 
SRC_ASM = file1.s \ 
     file2.s \ 
     file3.s \ 

OBJ_ASM = $(SRC_ASM:.s=.o) 
FLAGS = -Wall -Werror -Wextra 
NASM = nasm 
AR = ar 
RANLIB = ranlib 
ASM_FLAGS = -f macho64 

all :  $(NAME) 

$(NAME): $(OBJ_ASM) 
    $(AR) rc $(NAME) $(OBJ_ASM) 
    $(RANLIB) $(NAME) 

%.o : %.s 
    $(NASM) $(ASM_FLAGS) -o [email protected] $< 

fclean : clean 
    rm -f libfts.a 

re : fclean all 

.PHONY: clean fclean re 

Терминал вывода я получаю:

$ make -f makefile 
nasm -f macho64 -o file1.o file1.s 
nasm -f macho64 -o file2.o file2.s 
nasm -f macho64 -o file3.o file3.s 
ar rc libfts.a file1.o file2.o file3.o 
ranlib libfts.a 
+0

Моя проблема была у меня не было пустой строки между .S файлами и OBJ_ASM, даже если я его прямо здесь, потому что я добавил его при изменении файлы имен, поэтому здесь не было бы слишком долго: p спасибо! – dietbacon

Смежные вопросы