通过CMake,我尝试使用CTest执行简单的测试。我将此配置全部放在一个目录中 (${CMAKE_SOURCE_DIR}):
~$ cat hello.cpp
#include <iostream>
int main() {
std::cout << "hello world\n";
return(0);
}
~$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(TEST_CTEST)
enable_testing()
add_executable(test_ctest hello.cpp)
add_test(my_test ./build/test_ctest)
Run Code Online (Sandbox Code Playgroud)
然后我执行:
~$ rm -rf Testing/ build/
~$ cmake -S . -B build
~$ cmake --build build
~$ ./build/test_ctest
hello world
~$ ctest
*********************************
No test configuration file found!
*********************************
Usage
ctest [options]
Run Code Online (Sandbox Code Playgroud)
我在其他问答中发现的唯一提示是放入enable_testing()root 中CMakeLists.txt。我觉得我错过了一件小事,但我找不到什么。
如何使用 CTest 运行测试?
我想从普通的旧式 C 结构中派生出一个结构::sockaddr_storage,这样我就可以用方法来扩展它来处理它自己的数据。我可以像往常一样对派生结构进行类型转换,以访问存储在该结构中的不同套接字地址 AF_INET6 或 AF_INET。但我不明白使用虚拟析构函数时出现的问题,如下所示:
#include <netinet/in.h>
#include <iostream>
namespace myns {
struct Ssockaddr_storage1 : public ::sockaddr_storage {
Ssockaddr_storage1() : ::sockaddr_storage() {}
~Ssockaddr_storage1() {}
};
// This is only different by using a virtual destructor.
struct Ssockaddr_storage2 : public ::sockaddr_storage {
Ssockaddr_storage2() : ::sockaddr_storage() {}
virtual ~Ssockaddr_storage2() {}
};
} // namespace myns
int main() {
{
myns::Ssockaddr_storage1 ss;
std::cout << "Ssockaddr_storage1:\n";
std::cout << "ss_family = " << ss.ss_family << "\n";
sockaddr_in6* sa_in6 = (sockaddr_in6*)&ss;
std::cout << …Run Code Online (Sandbox Code Playgroud)