用C ++编写单元测试的Makefile

时间:2010-09-16 08:01:30

标签: c++ unit-testing makefile

我正在努力编写正确构建单元测试的Makefile。例如,假设文件结构如下所示

src/foo.cpp
src/foo.hpp
src/main.cpp
tests/test_foo.cpp
tests/test_all.cpp

因此,要构建可执行文件test_all,我需要构建test_foo.o,而test_foo.o依赖于test_foo.cpp,但也依赖于src / foo.o。

在这种情况下,最佳做法是什么?父文件夹中有一个Makefile?每个文件夹一个Makefile?如果是这样,我如何管理文件夹之间的依赖关系?

2 个答案:

答案 0 :(得分:5)

通常的做法是每个目录的Makefile。这就是我在阅读“Recursive Make Considered Harmfull”(http://miller.emu.id.au/pmiller/books/rmch/)之前所建议的。现在我推荐一个Makefile。还要检查自动依赖关系生成 - 现在您甚至不需要计算出测试所依赖的内容。你需要的只是一些目标。

答案 1 :(得分:4)

通常的做法是为每个文件夹创建一个Makefile。以下是根文件夹的简单 Makefile.am 脚本:

#SUBDIRS = src tests
all:
    make -C ./src
    make -C ./tests    
install:
    make -C ./src install
uninstall:
    make -C ./src uninstall
clean:
    make -C ./src clean
test:
    make -C ./tests test

src 文件夹的相应 Makefile.am 将如下所示:

AM_CPPFLAGS = -I./

bin_PROGRAMS = progName

progName_SOURCES = foo.cpp main.cpp
LDADD = lib-to-link

progName_LDADD = ../libs/
测试

Makefile.am 看起来类似:

AM_CPPFLAGS = -I../src

bin_PROGRAMS = tests

tests_SOURCES = test_foo.cpp test_all.cpp

使用automake从.am文件生成 Makefile.in 文件。 configure 脚本将使用.in文件生成Makefile。 (对于您希望直接手动编码Makefile的小项目。)