在大型C项目上进行代码测试

时间:2015-09-23 15:14:50

标签: php c testing compilation development-environment

我一直在浏览PHP-SRC项目,并且我已阅读了简要的开发指南:http://php.net/build-setup.php

然而,对于C来说相对较新(但对编程而言并不陌生),我每次需要测试更改时都需要重新编译,我有点吃惊。

使用PHP编写时,我可以使用一小段代码来查看某个执行点是否x == y并立即对其进行测试。但在我开始潜入一个像PHP一样大的项目之前,我想知道我是否错了,因为我需要构建整个源来测试小的变化。

构建过程中是否存在可以将小更改编译为现有二进制文件而无需每次等待10-20分钟的阶段?

1 个答案:

答案 0 :(得分:1)

我认为make就是你所需要的 https://www.gnu.org/software/make/
并且文件是在 http://www.gnu.org/software/make/manual/make.html
所以你有很多大的源文件,而你只对其中一个进行了一些小的改动,make只会重新编译那个源文件,因为其他文件是最新的。
在我建立一个mini" shell"时,这里是makefile:

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文件由规则组成:

> target : prerequisite
recipe

使用配方制作目标需要先决条件 最后,如果要删除目标文件,可以添加" clean"然后运行:

make clean