为什么我们需要用Catch分别编译主测试文件

Why do we need to compile a main test file separately with Catch?

本文关键字:分别编译 测试 文件 Catch 我们 为什么      更新时间:2023-10-16

我写了以下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文件?

从制作手册中:

$&lt;
第一个先决条件的名称。如果目标从隐式规则中获得食谱,则将是隐式规则添加的第一个先决条件(请参阅隐式规则(。

因此,规则Bellow编译data_test.cpp,并且不编译test_main.cpp

data_test.o: test/data_test.cpp test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)