Makefile для модульных тестов в C ++ - PullRequest
5 голосов
/ 16 сентября 2010

Я изо всех сил пытаюсь написать Make-файлы, которые правильно собирают мои модульные тесты.В качестве примера предположим, что структура файла выглядит следующим образом:

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

Итак, чтобы построить исполняемый файл test_all, мне нужно собрать test_foo.o, который, в свою очередь, зависит от test_foo.cpp, но также и от src /foo.o.

Какова лучшая практика в этом случае?Один Makefile в родительской папке?Один Makefile на папку?Если да, как мне управлять зависимостями между папками?

Ответы [ 2 ]

5 голосов
/ 16 сентября 2010

Обычная практика - это Makefile для каждого каталога. Это то, что я бы посоветовал, прежде чем читать «Рекурсивное создание считается вредным» (http://miller.emu.id.au/pmiller/books/rmch/). Теперь я бы порекомендовал один Makefile. Также проверьте автоматическое создание зависимостей - теперь вам даже не нужно работать над тем, что вы делаете. тесты зависят от. Все, что вам нужно, это некоторые цели.

4 голосов
/ 16 сентября 2010

Обычная практика - это один 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

Соответствующий Makefile.am для папки src будетвыглядит следующим образом:

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 для генерации Makefile.in файлы из файлов .am.Сценарий configure будет использовать файлы .in для создания файлов Makefile.(Для небольших проектов вы бы хотели вручную написать код Makefiles).

...