-etags${EXEEXT}: ${srcdir}/etags.c regex.o $(NTLIB) $(config_h)
- $(CC) ${ALL_CFLAGS} -DEMACS_NAME="\"GNU Emacs\"" \
- -DVERSION="\"${version}\"" ${srcdir}/etags.c \
- regex.o $(LOADLIBES) $(NTLIB) -o etags${EXEEXT}
+etags_deps = ${srcdir}/etags.c regex.o $(NTLIB) $(config_h)
+etags_cflags = -DEMACS_NAME="\"GNU Emacs\"" -DVERSION="\"${version}\"" -o $@
+etags_libs = regex.o $(LOADLIBES) $(NTLIB)
+
+etags${EXEEXT}: ${etags_deps}
+ $(CC) ${ALL_CFLAGS} $(etags_cflags) $< $(etags_libs)
+
+## ctags.c is distinct from etags.c so that parallel makes do not write two
+## etags.o files on top of each other.
+## FIXME?
+## Can't we use a wrapper that calls 'etags --ctags'?
+ctags${EXEEXT}: ${srcdir}/ctags.c ${etags_deps}
+ $(CC) ${ALL_CFLAGS} $(etags_cflags) $< $(etags_libs)