Makefile для модульных тестов с использованием его аналога в другом каталоге - PullRequest
0 голосов
/ 29 апреля 2020

Предположим, у меня есть такая структура:

src/a/foo.cpp
src/b/bar.cpp
src/main.cpp
tests/a/test_foo.cpp
tests/b/test_bar.cpp
tests/test_all.cpp

Мне бы очень хотелось, чтобы Make-файл создавал исходники и создавал тесты. Для источников у меня есть эта настройка:

src = $(shell find src -name "*.cpp")
objs = $(src:.c=.o)
bin = stuff

$(bin): $(objs)
    $(CXX) -o $@ $^ $(LDFLAGS)

Для тестов я хотел бы иметь аналогичную упрощенную c структуру, в которой каждый тест должен был бы собрать свою контр-часть в src и сам а также.

Итак, для test_foo я бы хотел такую ​​задачу:

clang++ -o test_foo tests/test_foo.cpp src/foo.cpp

Кроме того, вы считаете хорошей идеей иметь отдельный Makefile для тестов и еще один для двоичного?

Большое спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Просто добавьте тестовый материал в ваш make-файл. Может быть что-то вроде:

testsrcs := $(wildcard tests/test_*.cpp)
testbins := $(testsrcs:tests/%.cpp=%)

tests: $(testbins)

$(testbins): test_% : tests/test_%.cpp src/%.cpp
        $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
...