При наличии исходного пакета, использующего GNU Automake, типичная сборка выглядит следующим образом:
cd ${srcdir}
./congigure
./make
Чтобы создать один файл, а не все сразу, make
обычно достаточно сделать следующее:
$ make path/to/file
Однако это возвращает ошибку:
make: *** No rule to make target 'path/to/file'. Stop.
Требуемый файл находится в подкаталоге, который содержит свой собственный makefile. Можно перейти в этот подкаталог и сделать это ./configure && make file
там, каждый раз , когда что- make
то не получается, проделывая то же самое, чтобы предоставить эти зависимости, и повторяя процесс до тех пор, пока не будет make
успешно сгенерирован требуемый файл.
Но ведь должен же быть более простой способ...?
Итак, если предположить, что типичный пакет Linux собирается без проблем с помощью GNU Automake, можно ли заставить его собрать один файл (в частности, двоичный исполняемый файл)?
решение1
Если в подкаталоге есть make-файл, вам, вероятно, придется вызвать этот make-файл.
make -C path/to file
решение2
Лучшее, что мне удалось придумать, — это использовать for
цикл для создания зависимых подкаталогов, а затем создать файл из его каталога:
for lib in dependency1 dependency2 dependency3
do
cd ${srcdir}/libs/${lib}
./configure --prefix=/usr
make LDFLAGS+=-lstdc++
done
cd ${srcdir}/libs/directory
./configure --prefix=/usr
--localstatedir=/var \
--mandir=/usr/share/man
make LDFLAGS+=-lstdc++ file
Это не ответ на вопрос, но, боюсь, это лучшее, что может быть...