На самом деле вы не хотите архивировать один целый файл .a внутри другого.Возможно, вы захотите заархивировать элементы одного архива в другом, но это совершенно другая операция.
Программа 'ar' прекрасно способна хранить исходные файлы, сжатые tar-файлы, HTML-файлы, XMLфайлы и почти любой другой тип файла в «.a» (а суффикс «.a» только условный, а не обязательный) - попробуйте это время.Тем не менее, он обрабатывает объектные файлы (и только объектные файлы) специально и делает их доступными для использования компоновщиком ('ld'), но компоновщик использует такие файлы только в том случае, если расширение равно .a.
Итак, вы хотите иметь две библиотеки:
foo.a
, содержащие только foo.o
bar.a
, содержащие bar.o
и все объекты из foo.a
За исключением того, что вы предлагаете и извлекаете объекты из foo.a
и встраиваете их в bar.a
, единственной альтернативой является перечисление членов foo.a
в качестве членов bar.a
также:
FOO_OBJS = foo.o
BAR_OBJS = bar.o $(FOO_OBJS)
foo.a: $(FOO_OBJS)
$(AR) $(ARFLAGS) $@ $(FOO_OBJS)
bar.a: $(BAR_OBJS)
$(AR) $(ARFLAGS) $@ $(BAR_OBJS)
Я предполагаю, что ваш пример сведен к минимуму.Если это не так, то зачем возиться с двумя библиотеками.Все, что использует только код из foo.o, будет связывать только foo.o, даже если для ссылки есть bar.a.(Было бы немного по-другому, если бы это были общие объекты, но, вероятно, было бы лучше использовать только один, а не два общих объекта.)