Значит дали нам в школе задание самостоятельно имплементировать ряд функций из 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)
Не дало ожидаемых результатов, по сему нуждаюсь в вашей помощи.