BOOST_AUTO_TEST_CASE在使用icc编译时不注册测试用例

BOOST_AUTO_TEST_CASE does not register test case when compiled with icc

本文关键字:编译 注册 测试用例 icc TEST AUTO CASE BOOST      更新时间:2023-10-16

有人能解释为什么当我使用icc/icpc编译时,BOOST_AUTO_TEST_CASE的使用没有注册吗?当我用g++编译时,它注册&跑步。

#define BOOST_TEST_MODULE boosttestunitfailure
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE( helloworld )
{
  BOOST_CHECK( true );
}

以下是我如何使用ICC进行编译——请注意,当我运行时,exe会显示"测试树为空":

plxv1142: atevet/BoostTestUnitFailure (master)> icpc --version
icpc (ICC) 14.0.4 20140805
Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.
plxv1142: atevet/BoostTestUnitFailure (master)> icpc -std=c++11 -Wall -fPIC -DBOOST_TEST_DYN_LINK -I/usr/pkgs/boost/1.53.0/include  -O0 -o boostunittestcasefailure test.cpp -Wl,-rpath=/usr/pkgs/boost/1.53.0/lib64 /usr/pkgs/boost/1.53.0/lib64/libboost_unit_test_framework.so
plxv1142: atevet/BoostTestUnitFailure (master)> ./boostunittestcasefailure 
Test setup error: test tree is empty

这里是g++-注意,当使用g++编译时,测试会在框架中注册并运行:

plxv1142: atevet/BoostTestUnitFailure (master)> g++ --version
g++ (GCC) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
plxv1142: atevet/BoostTestUnitFailure (master)> g++ -std=c++11 -Wall -fPIC -DBOOST_TEST_DYN_LINK -I/usr/pkgs/boost/1.53.0/include -O0 -o boostunittestcasefailure test.cpp -Wl,-rpath=/usr/pkgs/boost/1.53.0/lib64 /usr/pkgs/boost/1.53.0/lib64/libboost_unit_test_framework.so
plxv1142: atevet/BoostTestUnitFailure (master)> ./boostunittestcasefailure                                                                                                    Running 1 test case...
*** No errors detected

如果有人好奇,这是因为我的环境决定使用哪个g++的方式(使用不同版本工具的包装器的公司环境)。当我删除了公司环境的附加内容时,问题就消失了。