Я знаю, что вы запрашиваете механизм для автоматической сборки всех исходных файлов в каталоге, но мне не нравится такой подход;в какой-то момент в будущем нужно будет отключить один или два отдельных теста, и вам придется делать что-то немного странное, например, переименовывать файл, просто чтобы он не был автоматически скомпилирован.
Я предпочитаю перечислять каждую программу, которую вы намереваетесь собрать в Makefile
, но это не должно быть ужасно.С некоторыми суффиксными правилами вы можете легко встроить все свои .c
файлы в .o
файлы или непосредственно в исполняемые файлы.
Вот фрагмент из набора регрессионных тестов AppArmor, который типичен длякак выглядит эта вещь(Я надеюсь Я скопировал все соответствующие биты, это было несколько лет.)
SRC=access.c \
changeprofile.c \
changehat.c \
changehat_fork.c \
changehat_misc.c \
....
unlink.c \
xattrs.c
...
#only do the ioperm/iopl tests for x86 derived architectures
ifneq (,$(findstring $(shell uname -i),i386 i486 i586 i686 x86 x86_64))
SRC+=syscall_ioperm.c syscall_iopl.c
endif
...
LIBIMMUNIX:=$(shell if [ -f /usr/lib/libapparmor.so -o -f /usr/lib64/libapparmor.so ] ; then \
echo -lapparmor ; \
elif [ -f /lib/libimmunix.so.1 -o -f /lib64/libimmunix.so ] ; then \
echo -limmunix ; \
fi )
CFLAGS+=$(CHANGEHAT_FLAGS) -Wall -Wstrict-prototypes
LDLIBS+=$(LIBIMMUNIX)
EXEC=$(SRC:%.c=%)
...
all: $(EXEC) changehat.h
Это не так просто, как просто перенести новый файл в каталог;вам нужно добавить его в Makefile
.Но вам нужно только добавить имя, один раз, в одну строку, и оно там навсегда.Если вы хотите отключить его, закомментируйте оскорбительную строку.Это почти так же просто и значительно больше контроля над процессом сборки.