我编写了以下 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
文件有什么原因吗?