我正在努力编写正确构建单元测试的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?如果是这样,我如何管理文件夹之间的依赖关系?
答案 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的小项目。)