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

Mic*_*Ulm 6 c++ unit-testing makefile

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

src/foo.cpp
src/foo.hpp
src/main.cpp
tests/test_foo.cpp
tests/test_all.cpp
Run Code Online (Sandbox Code Playgroud)

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

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

Vij*_*hew 6

常见的做法是每个文件夹都有一个 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
Run Code Online (Sandbox Code Playgroud)

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

AM_CPPFLAGS = -I./

bin_PROGRAMS = progName

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

progName_LDADD = ../libs/
Run Code Online (Sandbox Code Playgroud)

用于测试的Makefile.am看起来类似:

AM_CPPFLAGS = -I../src

bin_PROGRAMS = tests

tests_SOURCES = test_foo.cpp test_all.cpp
Run Code Online (Sandbox Code Playgroud)

使用 automake从 .am 文件生成Makefile.in文件。配置脚本将使用 .in 文件来生成 Makefile。(对于小型项目,您希望直接手动编写 Makefile)。


dav*_*ave 5

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