Makefile создает несколько сетей в качестве модульного тестирования C ++

0

Я новичок в make файлах, но хочу создать проект C++ с некоторыми модульными тестами.

Каталог моего проекта выглядит следующим образом:

makefile
src/
    main.cpp
    file1.cpp
    file1.h
    file2.cpp
    file2.h
    ...
test/
    file1_test.cpp
    file2_test.cpp
    ...

Я хочу, чтобы makefile собирал программу в src/, а также компилировал программы в моем каталоге test/. Каждый файл * _test.cpp содержит функцию main(). Я пробовал много вещей, но каждый раз, когда я пытаюсь скомпилировать, я сталкиваюсь с какой-то новой проблемой, и мне кажется, что это должна быть довольно простая задача.

(Кстати, я был вдохновлен этим учебником http://c.learncodethehardway.org/book/ex28.html)

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ:

Мой текущий make файл выглядит примерно так. (Я должен был внести некоторые изменения, чтобы соответствовать этому более общему примеру)

CFLAGS =
LIBS =
LDFLAGS = -L/usr/local/
CC = g++ 
SOURCES=$(wildcard src/**/*.cpp src/*.cpp)
OBJECTS=$(patsubst %.cpp,%.o,$(SOURCES))

TARGET=build/MyProgram

TEST_SRC=$(wildcard test/*_test.cpp)
TESTS=$(patsubst %.cpp,%.o,$(TEST_SRC))
TESTS_PRG=$(patsubst %.cpp,%,$(TEST_SRC))
TESTS_OBJ=$(patsubst test/%_test.cpp,src/%.o,$(TEST_SRC))

all: $(TARGET) 

$(TARGET): build $(OBJECTS)
        g++ -o $(OBJECTS) $(CFLAS) $(LIBS)

build:
        @mkdir -p build
        @mkdir -p bin

.PHONY: tests
tests: $(TESTS_OBJ)                                                                                                                                        
        g++ $(TESTS_OBJ) $(CFLAGS) -o $(TESTS_PRG)                                                                                                         

clean:
        rm -rf build $(OBJECTS)                                                                                                                            
        rm -f tests/tests.log
        find . -name "*.gc*" -exec rm {} \;
        rm -rf 'find . -name "*.dSYM" -print'
  • 0
    Как выглядит ваш текущий make-файл?
  • 0
    Вы должны опубликовать свой make-файл и рассмотреть возможность использования CMake и CTest.
Показать ещё 1 комментарий
Теги:
makefile
unit-testing

1 ответ

0

Я запустил ваш make файл как есть, после исправления ошибок пробелов по всему месту.

Однако, если я это сделаю, я не получаю поведение, которое вы требуете: я получаю сообщение об ошибке g++ о том, что второй файл1_test не существует, как и ожидалось. Чтобы получить поведение, которое вы требуете, мне нужно удалить -o $ {TESTS_PRG} в конце строки рецепта правила "тесты". Причина в следующем:

Вы не можете указать несколько выходных файлов (-o) для создания нескольких программ для одного вызова компилятора. Если вы удалите -o $ {TESTS_PRG}, то компилятор попытается создать одну программу из всех указанных объектных файлов ($ {TESTS_OBJ}), и каждая из них, вероятно, будет иметь функцию main(), поскольку они должны быть разные программы. Вам нужен один вызов компилятору для каждой программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню