4

我正在开发一个长整数库作​​为我的 C++ 家庭作业,我们的老师提供了一个接口使用示例。这是该文件的一部分:

void test_conversions() 
{ 
  int ordinary = 42; 
  lint long_int(ordinary); 
  long_int = ordinary; 

  ordinary = static_cast<int>(long_int); // ok 

  std::string s("-15"); 
  lint z(s); 

  z.to_string() == s; // this should be true
} 

void failed_conversions_test() 
{
  int ordinary = 42; 
  std::string str = "-42"; 
  lint x = 5; 

  ordinary = x; // must be compilation error! 
  x = str; // must be compilation error! 
  str = x; // must be compilation error! 
}

我想在构建过程中测试这个文件的兼容性。如您所见,应该有四个测试:一个用于编译成功 ( test_conversions),三个用于每个失败的failed_conversions_test. int main()我可以通过添加 stub并调用ADD_TESTin轻松实现编译成功检查CMakeLists.txt,但我如何告诉 CMake 编译剩余的三个测试并确保编译不成功?

我正在考虑添加诸如“运行执行所有操作的自定义脚本”之类的内容,但这非常依赖于编译器和平台,并且看起来不是好方法。

谢谢你。

4

1 回答 1

5

try_compile命令可能是您正在寻找的。

您可以使用它来尝试构建单个源文件并将结果报告回 CMake:

try_compile(COMPILE_SUCCEEDED ${CMAKE_BINARY_DIR}/compile_tests my_test_src.cpp)

if(COMPILE_SUCCEEDED)
  message("Success!")
endif()

此功能背后的动机是测试编译器功能,因此它只会在 CMake 配置时执行,而不是在构建时执行。如果您仍然想要后者,则需要借助脚本使用自定义构建步骤。

于 2013-11-06T09:29:31.743 回答