为什么我们需要用Catch分别编译主测试文件
Why do we need to compile a main test file separately with Catch?
我写了以下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)
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 用于交叉编译和CMake的预处理器宏的单元测试
- MinGw 无法从 cmake 编译测试文件
- C++代码以测试另一个.cpp如果可以编译它
- 提升 1.64 单元测试编译失败
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 在Raspbian上编译pybind11测试用例时出现致命错误
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 如何从测试脚本中运行WAF编译C++程序?
- 为什么我们需要用Catch分别编译主测试文件
- CMake 子目录 - 编译测试子项目时,包含的头文件没有此类文件或目录
- Windows CMake 不会编译测试程序
- 在代码中使用 strcmp,编译>测试>失败,调试,意识到我忘记了 0==strcmp
- 如何在应该失败的CMake中实现编译测试
- 如何使用 cmake 分别编译两组源文件
- 无法编译测试PostgreSQL程序
- 为什么我们需要分别编译和链接
- 编译测试代码时C++错误"undefined reference to"
- 在使用makefile分别编译每个源文件时创建一个调试文件