gpt4 book ai didi

c++ - 如何在应该失败的CMake中实现编译测试?

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:06 25 4
gpt4 key购买 nike

作为我的 C++ 家庭作业,我正在研究一个长整数库,我们的老师提供了它的接口(interface)用法示例。这是该文件的一部分:

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 中显示的每个失败。我可以通过在 CMakeLists.txt 中添加 stub int main() 并调用 ADD_TEST 轻松实现编译成功检查,但是我该如何告诉 CMake编译其余三个测试并确保编译不成功?

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

谢谢。

最佳答案

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

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

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

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

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

关于c++ - 如何在应该失败的CMake中实现编译测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com