我编写了以下 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”,引用自:
主可执行文件的隐式条目/启动
错误。对我来说,似乎只要包含 test_main.cpp
作为我实际测试的依赖项就应该可以正常工作。是否有原因需要将此主文件编译为自己的 .o
文件?
最佳答案
来自制作手册:
$<
The name of the first prerequisite. If the target got its recipe from an implicit rule, this will be the first prerequisite added by the implicit rule (see Implicit Rules).
因此,下面的规则编译 data_test.cpp
而不会编译 test_main.cpp
:
data_test.o: test/data_test.cpp test/test_main.cpp
$(CXX2) $< $(CXXFLAG2)
关于c++ - 为什么我们需要用Catch单独编译一个主测试文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50072794/