Automake не предназначен для производства объекта. Он будет собирать либо программы, либо библиотеки.
Трудно ответить на ваш вопрос, не зная, почему вы хотите скомпилировать один объектный файл, а не что-то еще. Может быть, есть более четкий ответ на вашу "реальную" проблему.
A Makefile.am
вы можете написать это
noinst_LIBRARIES = libThread.a
libThread_a_SOURCES = Thread.cc Thread.h # No need to put headers in EXTRA_DIST
В результате Makefile
создаст библиотеку libThread.a
, содержащую только libThread.o
, и потому, что библиотеки *.a
представляют собой просто набор объектных файлов, в которых нет ссылок.
Приведенный выше Makefile.am
также приводит к тому, что выдаваемый Makefile
содержит правила для компиляции libThread.o
, поэтому вы можете добавить правило build:
, если хотите.
Если вы действительно хотите, чтобы Automake выпустил это правило компиляции, но не собирал библиотеку, вы можете использовать
EXTRA_LIBRARIES = libThread.a # EXTRA here means "output build rules but don't
# build unless something depends on it".
libThread_a_SOURCES = Thread.cc Thread.h
build: Thread.$(OBJEXT)
Теперь вам явно требуется, чтобы файл Thread.$(OBJEXT)
создавался только при вводе make build
, как в исходном Makefile
.
(Automake использует .$(OBJEXT)
вместо .o
для поддержки расширений, таких как .obj
в вариантах DOS.)