c – 使用cmake:我怎么能写一个测试来验证一个类是抽象的?
我想知道我是否可以编写一个尝试实例化抽象类的.cpp文件:
// file: test_ensure_A_is_abstract.cpp class A { void foo() = 0; }; int main() { new A; } // a simple shell script would look like this,but that is missing all the // options cmake normally generates (-I,-g,-c,-o,...) if g++ test_ensure_A_is_abstract.cpp; then exit 1; else exit 0; fi 然后让cmake尝试编译它.我的观点是,我想证明该类是并且仍然是抽象的,因此无法实例化它. 我知道如何创建一个有效的目标,但我想知道是否有办法为已知无效的目标运行cmake?以前有人这么做过吗? 更新: 根据下面的steveire回答和评论,我编写了自己的模块来完成工作,并确保该类是真正的抽象(而不是指望任何编译器失败作为抽象类的指示.)所以我们必须有一个错误消息匹配特定错误.我支持其中4个,2个清楚地使类抽象(至少一个函数是纯虚拟)和另外2个将受保护和私有构造函数视为一个抽象类(就像抽象类一样,你不能做一个新的< ;班级名称>. 您可以在Snap中找到该模块! C git在这里: https://sourceforge.net/p/snapcpp/code/ci/master/tree/snapCMakeModules/Modules/ 它被命名为CheckCXXAbstractClass.cmake. 解决方法
http://www.cmake.org/cmake/help/v3.0/command/try_compile.html
http://www.cmake.org/cmake/help/v3.0/module/CheckCXXSourceCompiles.html check_cxx_source_compiles( "class A { void foo() = 0; };nint main() { new A; }" BUILT_ABSTRACT ) if (BUILT_ABSTRACT) message(FATAL_ERROR "A can be instantiated,but should be abstract.") endif() 如果适当设置CMAKE_REQUIRED_INCLUDES变量,则可以#include“A”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |