Я просматривал проект PHP-SRC и прочитал краткое руководство по разработке по адресу: http://php.net/build-setup.php
Однако, будучи относительно новым для C (но не новым для программирования), я немного озадачен мыслью, что мне нужно перекомпилировать каждый раз, когда мне нужно проверить изменения.
При написании на PHP, я могу набросать небольшой фрагмент, чтобы увидеть, если x == y
в определенный момент выполнения и проверить его практически сразу. Но прежде чем я начну погружаться в такой большой проект, как PHP, я хочу знать, не ошибаюсь ли я, что мне нужно собрать весь исходный код, чтобы протестировать небольшие изменения.
Есть ли в процессе сборки этап, на котором небольшие изменения можно скомпилировать в существующий двоичный файл, не ожидая каждый раз 10-20 минут?
я думаю, что делает то, что вам нужно.
https://www.gnu.org/software/make/
и документация на
http://www.gnu.org/software/make/manual/make.html
поэтому у вас есть много больших исходных файлов, и вы внесли небольшое изменение только в один из них, make будет перекомпилировать только этот исходный файл, так как остальные обновлены.
В то время, когда я построил мини «оболочку», вот make-файл:
CFLAGS=-g -O2 -Werror -Wfatal-errors
OBJECTS=parser.o analyser.o processing.o prompt.o
LINK=-lfl
shell: $(OBJECTS)
gcc $(CFLAGS) $(OBJECTS) $(LINK) -o shell
parser.o: shell.y
bison -d shell.y
gcc $(CFLAGS) -c shell.tab.c -o parser.o
analyser.o: shell.l
flex shell.l
gcc $(CFLAGS) -c lex.yy.c -o analyser.o
processing.o:processing.c processing.h
gcc $(CFLAGS) -c processing.c -o processing.o
prompt.o: prompt.c prompt.h
gcc $(CFLAGS) -c prompt.c -o prompt.o
clean:
rm -f $(OBJECTS) shell.tab.c lex.yy.c shell.tab.h
так что, если я внес изменение в processing.c, make будет перестраивать только processing.o, а затем повторно связывать проект.
поэтому файл make состоит из правил:
> цель: обязательное условие
рецепт
сделать необходимо предварительное условие для создания цели, используя рецепт.
наконец, если вы хотите удалить объектные файлы, вы можете добавить «чистое» правило и затем выполнить:
make clean
Других решений пока нет …