CMake 安装和测试

Install Rules 在库的 CMakeLists.txt 文件末尾添加 install add_library(MathFunctions mysqrt.cxx)target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})install(TARGETS MathFunctions DESTINATION lib)install(FILES MathFunctions.h DESTINATION include)在顶层 CMakeLists.txt 的末尾添加 ... ... ## 安装 install(TARGETS Tutorial DESTINATION bin)install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h" DESTINATION include )Testing Support 在顶层 CMakeLists.txt 的末尾添加 ... ... ## 测试 enable_testing()# does the application run add_test(NAME Runs COMMAND Tutorial 25)# does the usage message work? add_test(NAME Usage COMMAND Tutorial)# 设置校验信息 set_tests_properties(Usage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number" )# define a function to simplify adding tests function(do_test target arg result) add_test(NAME Comp${arg} COMMAND ${target} ${arg}) set_tests_properties(Comp${arg} PROPERTIES PASS_REGULAR_EXPRESSION ${result} )endfunction()# do a bunch of result based tests do_test(Tutorial 4 "4 is 2")do_test(Tutorial 9 "9 is 3")do_test(Tutorial 5 "5 is 2....

February 27, 2022 · 1 min · Rick Cui

CMake 添加依赖库和使用条件

添加依赖库和使用条件 CMakeLists.txt 注意编译选项、生成配置文件和条件编译三部分的顺序 # 设置CMake版本最低要求 cmake_minimum_required(VERSION 3.10)# 设置项目名称和版本 project(Tutorial VERSION 3.1)# 指定 C++ 标准 set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED True)# 设置编译选项 option(USE_MYMATH "Use tutorial provided math implementation" ON)# 生成一个头文件,传递 CMake 的一些设置到源代码 configure_file(TutorialConfig.h.in TutorialConfig.h)# 添加 MathFunctions library # add_subdirectory(MathFunctions) if(USE_MYMATH) add_subdirectory(MathFunctions) list(APPEND EXTRA_LIBS MathFunctions) list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")endif()# 添加源码文件和生成的目标文件的名称 add_executable(Tutorial main.cpp)# target_link_libraries(Tutorial PUBLIC MathFunctions) target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})# 添加头文件查找路径 # target_include_directories(Tutorial PUBLIC # "${PROJECT_BINARY_DIR}" # "${PROJECT_SOURCE_DIR}/MathFunctions" # ) target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}" ${EXTRA_INCLUDES} )子模块(库)的 CMakeLists.txt 文件 add_library(MathFunctions mysqrt....

February 27, 2022 · 1 min · Rick Cui

CMake 配置文件传递设置信息

CMakeList # 设置CMake版本最低要求 cmake_minimum_required(VERSION 3.10)# 设置项目名称和版本 project(Tutorial VERSION 2.0)# 指定 C++ 标准 set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED True)# 生成一个头文件,传递 CMake 的一些设置到源代码 configue_file(TutorialConfig.h.in TutorialConfig.h)# 添加源码文件和生成的目标文件的名称 add_executable(Tutorial main.cpp)# 添加头文件查找路径 target_include_directories(Tutorial PUBLIC "$(PROJECT_BINARY_DIR)")TutorialConfig.h.in // #define TUTORIAL_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define TUTORIAL_VERSION_MINOR @Tutorial_VERSION_MINOR@

February 26, 2022 · 1 min · Rick Cui

CMake 使用

一、CMakeLists.txt 文件示例 # 设置CMake版本最低要求 cmake_minimum_required(VERSION 3.10)# 设置项目名称和版本 project(Tutorial VERSION 1.0)# 添加源码文件和生成的目标文件的名称 add_executable(Tutorial main.cpp)二、CMake 相关命令 cmake .. 含有 CMakeLists.txt 文件的路径,根据 CMakeLists.txt 文件构建对应的工程; cmake .. -DUSE_MYMATH=OFF 将 CMake 编译选项 USE_MYMATH 设置为关闭状态,并构建工程 cmake .. -DCMAKE_BUILD_TYPE=Release 在Linux中设定 Release 版本,可设置的类型有 Debug、MinSizeRel、Release、RelWithDebInfo 指定编译工具为 MSVC(不同的 CMake 版本,命令写法不同): cmake -G "Visual Studio 14 2015 Win64" cmake -G "Visual Studio 16 2019" -A x64 cmake -G "Visual Studio 16 2019" -A Win32 在 Windows 中使用 MinGW...

February 26, 2022 · 1 min · Rick Cui

哈希法与冲突处理

哈希表及处理冲突的方法 一、哈希法与哈希表 哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。 这种方法的基本思想是:首先在元素的关键字 k 和元素的存储位置 p 之间建立一个对应关系 f,使得 p = f(k),f 称为哈希函数。 创建哈希表时,把关键字为 k 的元素直接存入地址为 f(k) 的单元;以后当查找关键字为 k 的元素时,再利用哈希函数计算出该元素的存储位置 p=f(k),从而达到按关键字直接存取元素的目的。 二、冲突 当关键字集合很大时,关键字值不同的元素可能会映象到哈希表的同一地址上,即 k1 ≠ k2,但 f(k1) = f(k2),这种现象称为冲突,此时称 k1 和 k2 为同义词。 三、哈希函数构造方法 构造哈希函数的原则是: 函数本身便于计算; 计算出来的地址分布均匀,即对任一关键字 k,f(k) 对应不同地址的概率相等,目的是尽可能减少冲突 常用的构造方法: 数字分析法 平方取中法 分段叠加法 除留余数法:假设哈希表长为 m,p 为小于等于 m 的最大素数,则哈希函数为 f(k)=k % p 伪随机数法 四、冲突处理方法 1. 开放地址法(Open addressing) 这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi 线性探测 二次探测 伪随机探测 线性探测再散列的优点是:只要哈希表不满,就一定能找到一个不冲突的哈希地址,而二次探测再散列和伪随机探测再散列则不一定;缺点是线性探测再散列容易产生二次聚集 2. 再哈希法 这种方法是同时构造多个不同的哈希函数,当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间...

February 25, 2022 · 1 min · Rick Cui