Рекомендация:
- Отделите ваши тесты от директории сборки компилятора
(То есть вы должны проводить тестирование в отдельном каталоге, чтобы не столкнуться с проблемой.)
Я не возился с GNU Make и .INTERMEDIATE
или .SECONDARY
файлами; Я не знаю, сделает ли это работу за вас.
Альтернативный вариант, который я вижу для вас, заключается в перекомпиляции всего компилятора каждый раз, когда изменяется любой из его исходных файлов или заголовков:
FILES.c = src/main.c src/type.c src/var.c ...
FILES.s = src/asm.s
FILES.h = src/myc.h ...
PROGRAM = myC
all: ${PROGRAM} test
${PROGRAM}: ${FILES.c} ${FILES.s} ${FILES.h}
${CC} ${CFLAGS} -o $@ ${FILES.c} ${FILES.s} ${LDFLAGS} ${LDLIBS}
Хотя компилятор достаточно мал, чтобы это не было болезненным, он будет работать. Однако он полностью исключает преимущества объектных файлов для самого компилятора; это означает, что все всегда перекомпилируется. Но вы можете избавиться от объектных файлов в любое время, так как не задокументировано, что компилятор зависит от них.
Я умеренно убежден, что это неправильный подход, хотя он будет «работать». Вы должны использовать отдельные каталоги для сборки компилятора и запуска тестов на компиляторе.