Значит дали нам в школе задание самостоятельно имплементировать ряд функций из libс. А в качестве бонуса на повышенную оценку можно написать еще и несколько функций для работы с листами.
Все это должно собираться с помощью make, используя для создания библиотеки ar, и никаких этих ваших libtool.
Основная часть должна собираться правилом $(NAME), бонусная bonus.
Но собираться они должны в один файл $(NAME) - скажем lib.a
и оба правила не должны делать что-либо если этого не требуется.
После чего я написал не хитрые правила
.PHONY: $(NAME) bonus
$(NAME): $(NAME)($(OBJ))
bonus: $(NAME)($(OBJ_BONUS))
Естественно указав все необходимые специальные переменные (особенно флаг U - отключение детерминистического режима для ar), и все заработало как надо, до тех пор пока я не решил запустить make с флагом -j.
При запуске нескольких потоков make видимо пытается добавить одновременно несколько объектников в архив, что приводит к тому что в архиве оказываются лишь некоторые из них.
В случае с правилом $(NAME), так как цель является действительно изменяемым файлом можно написать так:
$(NAME): $(OBJ)
    $(AR) $(ARFLAGS) $@ $?
Но что делать с правилом bonus я не знаю.
Я думал может быть мне поможет .SECONDEXPANSION, но
.PHONY: bonus
.SECONDEXPANSION
$(NAME): OBJ ?= $(OBJ_MAIN)
bonus: OBJ ?= $(OBJ_BONUS)
$(NAME): $$(OBJ)
    $(AR) $(ARFLAGS) $@ $?
bonus: $(NAME)
Не дало ожидаемых результатов, по сему нуждаюсь в вашей помощи.

