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

时间:2018-04-28 04:18:42

标签: c++ makefile linker catch-unit-test

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

    <? while ( $query->have_posts() && $count != 3) : $query->the_post()?>
        <? $count++; ?>
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-4 col-lg-4">
                <?php the_post_thumbnail('medium'); ?>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-8 col-lg-8 post-info">
                <h3><a title="<?php echo get_the_title(); ?>" href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></h3>
                <time><?php the_date(); ?></time>
                <div class="category">
                <!--    <p>Category: <a title="Posts about <?php get_category_link(get_the_category()[0]->title); ?>" href="<?php echo get_category_link(get_the_category()[0]->id); ?>"><?php the_category(', ', 'single', get_the_ID()); ?></a></p>-->
                </div>
                <a title="<?php echo get_the_title(); ?>" href="<?php echo get_permalink(); ?>" class="col-12 btn btn-block btn-info">Read More..</a>
            </div>
        </div>
        <?php
    endwhile; //resetting the page loop
    wp_reset_query(); //resetting the page query
    ?>

在我的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

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

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

但是,我收到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文件?

1 个答案:

答案 0 :(得分:5)

从制作手册:

  

$&lt;
  第一个先决条件的名称。如果目标从隐式规则获得其配方,则这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。

因此,下面的规则编译data_test.cpp并且不编译test_main.cpp

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