gpt4 book ai didi

c++ - 为什么要用Catch单独编译一个主测试文件?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:10 25 4
gpt4 key购买 nike

我编写了以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com