Я написал следующий Makefile (который работает как положено):
CXX2 = clang++
CXXFLAG2 = -std=c++11 -c -g -O0 -Wall -Wextra
LD2 = clang++
LDFLAG2 = -std=c++11
testing: data_test.o test_main.o dataframe.o csvreader.o course.o
$(LD2) $^ $(LDFLAG2) -o $@
data_test.o: test/data_test.cpp
$(CXX2) $< $(CXXFLAG2)
test_main.o: test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
dataframe.o: src/DataFrame.cpp src/CSVReader.cpp src/Course.cpp
$(CXX2) $< $(CXXFLAG2)
В моем файле test_main.cpp
есть только следующие строки:
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
Я попытался проверить, смогу ли я заменить в моем Makefile правило теста следующим образом:
data_test.o: test/data_test.cpp test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
Однако я получаю ошибку "_main", referenced from:
implicit entry/start for main executable
. Мне кажется, что он должен работать нормально, включая test_main.cpp
в качестве зависимости для моих реальных тестов. Есть ли причина, по которой этот основной файл должен быть скомпилирован как собственный .o
файл?