如何在CMake中实现编译测试,哪些应该失败? 我正在研究一个长整数库作为我的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! } void test_conversions() { int普通=42; 皮棉长绒棉(普通); long_int=普通; 普通=静态(长整型);//正常 std::字符串s(“-15”); 林特z(s); z、 to_string()==s;//这应该是真的 } 无效失败的\u转换\u测试() { int普通=42; std::string str=“-42”; 皮棉x=5; 普通=x;//必须是编译错误! x=str;//必须是编译错误! str=x;//必须是编译错误! }

如何在CMake中实现编译测试,哪些应该失败? 我正在研究一个长整数库作为我的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! } void test_conversions() { int普通=42; 皮棉长绒棉(普通); long_int=普通; 普通=静态(长整型);//正常 std::字符串s(“-15”); 林特z(s); z、 to_string()==s;//这应该是真的 } 无效失败的\u转换\u测试() { int普通=42; std::string str=“-42”; 皮棉x=5; 普通=x;//必须是编译错误! x=str;//必须是编译错误! str=x;//必须是编译错误! },c++,testing,compilation,compiler-errors,cmake,C++,Testing,Compilation,Compiler Errors,Cmake,我想在构建过程中测试此文件的可编译性。如您所见,应该有四个测试:一个用于编译成功(test\u-conversions),三个用于failed\u-conversions\u-test中显示的每个失败。我可以通过添加存根int main()并在CMakeLists.txt中调用ADD\u TEST轻松实现编译成功检查,但我如何告诉CMake编译其余三个测试并确保编译不成功 我曾考虑添加类似“运行自定义脚本,它可以完成所有事情”,但这是非常依赖于编译器和平台的,看起来不是一个好方法 谢谢。该命令可

我想在构建过程中测试此文件的可编译性。如您所见,应该有四个测试:一个用于编译成功(
test\u-conversions
),三个用于
failed\u-conversions\u-test
中显示的每个失败。我可以通过添加存根
int main()
并在
CMakeLists.txt
中调用
ADD\u TEST
轻松实现编译成功检查,但我如何告诉CMake编译其余三个测试并确保编译不成功

我曾考虑添加类似“运行自定义脚本,它可以完成所有事情”,但这是非常依赖于编译器和平台的,看起来不是一个好方法

谢谢。

该命令可能就是您要查找的

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

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

if(COMPILE_SUCCEEDED)
  message("Success!")
endif()
这个特性背后的动机是测试编译器特性,因此它只在CMake配置时执行,而不是在构建时执行。如果仍然需要后者,则需要使用脚本执行自定义构建步骤