C++ 为什么我们需要用Catch单独编译一个主测试文件?

C++ 为什么我们需要用Catch单独编译一个主测试文件?,c++,makefile,linker,catch-unit-test,C++,Makefile,Linker,Catch Unit Test,我编写了以下Makefile(按预期工作): 我尝试在Makefile中查看是否可以按如下方式替换测试规则: data_test.o: test/data_test.cpp test/test_main.cpp $(CXX2) $< $(CXXFLAG2) data\u test.o:test/data\u test.cpp test/test\u main.cpp $(CXX2)$

我编写了以下Makefile(按预期工作):

我尝试在Makefile中查看是否可以按如下方式替换测试规则:

data_test.o: test/data_test.cpp test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)
data\u test.o:test/data\u test.cpp test/test\u main.cpp
$(CXX2)$<$(CXXFLAG2)
但是,我得到一个
“\u main”,引用自:
主可执行文件的隐式输入/启动
错误。在我看来,它应该可以正常工作,只是将
test\u main.cpp
作为实际测试的依赖项。是否有理由将此主文件编译为自己的
.o
文件?

来自make手册:


$我明白了!谢谢
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
data_test.o: test/data_test.cpp test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)
data_test.o: test/data_test.cpp test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)