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

rb612

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

SM

从制造手册中:

$ <
第一个必备项的名称。如果目标从隐式规则获取其配方,这将是隐式规则添加的第一个前提条件(请参阅隐式规则)。

因此,下面的规则可以编译,data_test.cpp而不能编译test_main.cpp

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们需要分别编译和链接?

为什么我们需要使用标记接口?

为什么我们需要使用flatMap?

为什么我们需要使用基数?

为什么在使用__syncthreads时我们不需要使用volatile变量

在 C 中使用指针时,我们何时以及为什么需要使用 malloc?

为什么我们需要使用hint.start()?

为什么我们需要使用awaitTermination而不是shutdownNow()?

为什么我们需要使用Collection.sort()方法对List进行排序?

为什么我们需要使用 .net 扩展名保存 pytorch 模型?

为什么我们需要使用多个版本的JQuery库

为什么我们需要使用导入“ babel-polyfill”;在反应成分?

为什么我们需要使用grunt-useminPrepare

我们为什么要使用lua_pushinteger()?

为什么我们要使用argv [2] [0]

我们为什么要使用docker-registry?

我们为什么要使用end Function?

我们为什么要使用扩展?

为什么我们需要测试伪代码?

为什么我们需要使用线程来运行Kafka使用者?我们需要多少个线程?

什么是稀疏文件,为什么我们需要它?

fabric-tools中的./teardownFabric.sh是什么?以及为什么我们需要使用此命令?

为什么我们不需要使用“ require”语句,但仍然可以使用内置函数?

我们为什么需要使用生成器设计模式时,我们可以做同样的事情setter方法?

为什么我们需要* .lib文件?

为什么我们需要qresource文件?

为什么我们需要使用Context.obtainStyledAttributes和define-styleable来获取GUI组件的属性

为什么我们需要使用双指针来访问二维数组?

为什么我们需要使用 'get_absolute_url()' 而不是自定义定义的类似方法?