首页 > 编程语言 >用 Visual C++ 2022 和 CMake 编译 CUnit 静态库

用 Visual C++ 2022 和 CMake 编译 CUnit 静态库

时间:2024-06-12 22:13:14浏览次数:11  
标签:CMake C++ 编译 Visual 3.3 cunit

准备工作

源代码获取

CUnit 是知名的 C 语言单元测框架,其源代码最初发布在 sourceforge 上,网址为:https://sourceforge.net/projects/cunit/ 截止到目前为止,最新Release版的版本号是:2.1-3,发布时间是2014年4月24日。

有一些Fork自 sourceforge 的后续改进版本,我们选取的是 https://gitlab.com/cunity/cunit 为什么选择它呢?除了它更新时间较新以外,最主要的原因是它提供了一个非常友好的文档页面:https://cunity.gitlab.io/cunit/index.html 代码的文档是非常重要的,其重要性一点也不亚于代码本身。另外,它采用了CMake进行编译管理,这是我喜欢的编译工具。

访问 https://gitlab.com/cunity/cunit/-/releases 这个页面,可以看到当前最新 Release 版本是 3.3.1,更新于2024年5月17日。我们就用它了。下载该本版打包的源代码文件:cunit-3.3.1.zip

编译环境

  1. Visual Studio 2022
  2. CMake (版本不应小于 3.5,我实际采用的版本是 3.28.3)

编译过程

为什么我不完全采用 CMake 编译?

尽管这一份源代码提供了 CMake 脚本,但它的 CMake 脚本不支持采用CMAKE_BUILD_TYPE参数设置DebugRelease编译类型,这一点我非常不喜欢。通常我在编译 C 或者 C++ 代码库的时候会明确指定:编译目标平台是Win32还是x64,编译类型是Debug还是Release。这些都必须明确指定才行。
所以我采用的办法是:采用 CMake 脚本生成 Visual C++ 工程,然后在 Visual C++ 中编译特定版本。

我的编译过程

首先将 cunit-3.3.1.zip 解压到一个目录中。比如在我的电脑上,我将其解压至:D:\Dev\Build\cunit-3.3.1
然后,在控制台(命令行)中:

cd /d D:\Dev\Build\cunit-3.3.1
mkdir local-build
cd local-build

编译 x64 平台的不同编译类型的版本

执行以下 CMake 命令:

cmake -G "Visual Studio 17 2022" -A x64 ..

image

可以看到在local-build文件夹中生成了 Visual Studio 的 Solution 文件:CUnit.sln
image

双击CUnit.sln打开Visual C++,在 cunit 编译项目的属性中:
image

  1. 将 Output Directory 设置为:$(SolutionDir)Output\LIB\$(Platform)\$(Configuration)\
  2. 将 Intermediate Directory 设置为:$(SolutionDir)IntDir\$(ProjectName)\$(Platform)\$(Configuration)\

然后针对各个编译类型进行批量编译:
image

这样就一次性地编译好了x64平台下的DebugReleaseMinSizeRelRelWithDebInfo这4个编译类型的版本。
local-build\Output\LIB\x64文件夹在,可以看到各个编译类型的编译好的文件整整齐齐码在各个子目录中:
image
这就是前面我们设置 Output Directory 这个属性的结果,看,非常方便 吧。

编译 Win32 平台的不同编译类型的版本

前面针对x64平台进行了编译,我们将编译好的文件打包存好,然后再次解压 cunit-3.3.1.zip,假设这次我们还解压到D:\Dev\Build\cunit-3.3.1
然后,在控制台(命令行)中:

cd /d D:\Dev\Build\cunit-3.3.1
mkdir local-build
cd local-build

执行以下 CMake 命令:

cmake -G "Visual Studio 17 2022" -A Win32 ..

image
双击CUnit.sln打开Visual C++,在 cunit 编译项目的属性中:

  1. 将 Output Directory 设置为:$(SolutionDir)Output\LIB\$(Platform)\$(Configuration)\
  2. 将 Intermediate Directory 设置为:$(SolutionDir)IntDir\$(ProjectName)\$(Platform)\$(Configuration)\

同样批量编译得到Win32平台下的DebugReleaseMinSizeRelRelWithDebInfo这4个编译类型的版本。

标签:CMake,C++,编译,Visual,3.3,cunit
From: https://www.cnblogs.com/yapingxin/p/18244810

相关文章

  • Visual Studio 2022 v17.10 发布
    VisualStudio2022版本17.9 现已发布,带来了IDE各个领域的一系列性能增强。一些显着的改进包括:更快的WindowsFormsdesigner加载、更快的Razor着色、更快的解决方案加载以及减少的DLL开销。WindowsFormsdesigner加载速度此前有反馈称,在针对.NETC......
  • C++学习笔记,文件操作;文件写入读取
    目录5文件操作5.1文本文件5.1.1写文件5.1.2读文件 5.2二进制文件  5.2.1写文件5.2.2读文件 5文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件<fstream>文件类型分为两......
  • 【C++】多线程(基于Windows以及pthread库)
    文章目录一、前言1.1进程和线程二、创建线程2.1线程函数pthread_self(void)2.2创建线程三、线程退出3.1线程函数pthread_exit()四、线程回收4.1线程函数pthread_join()4.2线程数据回收五、线程分离5.1线程函数pthread_detach()六、C++线程类七、线程同......
  • DP经典问题----背包问题的代码实现(入门级)(C++/PYTHON)
    背包的状态转换方程i:表示物品序号j:表示背包大小W[i]:表示第i件物品的重量f[i,j]:表示在前i件物品中选择若干件放在承重为j的背包中,可以取得的最大价值f[i-1,j-Wi]:表示在前i-1件物品中选择若干件放在承重为j-Wi的背包中,可以取得的最大价值Pi(j>=Wi):表示第i件物品的价值,要......
  • 贪吃蛇c++
    来源5.贪吃蛇-从头开始编程_哔哩哔哩_bilibili我对代码进行了理解,并进行了改写,代码如下。因为水平有限,理解有误的地方,敬请指正。#include<iostream>#include<list>#include<thread>#include<Windows.h>usingnamespacestd;intnScreenWidth=120;intnScreenH......
  • 1188 有多少零-PAT乙级真题(2024夏季B-3)-极简代码-C++
    B-3有多少零给定 n 个正整数,请你数数它们的乘积的末尾有多少个零。例如26、225、48的乘积是280800,末尾有2个零。输入格式:输入给出一个不超过 10^6 的正整数 n,下一行给出 n 个不超过 10^6 的正整数。输出格式:在一行中输出给定的 n 个正整数的乘积末尾零的......
  • 1018 锤子剪刀布-PAT乙级真题-极简代码-C++
    大家应该都会玩“锤子剪刀布”的游戏:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第1行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J......
  • 【力扣真题】3.哈希表|算法真题程序设计数据结构考研保研复试机试面试秋招春招蓝桥杯
    242.有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入:s=“anagram”,t=“nagaram”输出:true示例2:输入:s=“rat”,t=“car”输出:false说明:你可以假设字符串只包含小写字母。力扣题目链接思......
  • SSM-小区物业管理系统-48954(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    基于SSM小区物业管理系统摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。每个社区的物业管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。在该领域,传统的手工存取......
  • 【CMake系列】08-debug release特性设置
    在构建的程序版本中,一共有debugreleaseminisizerelwithDebugInfo四种,其中我们主要使用到就是debugrelease两种,这两种存在着一定的不同,debug版本用于调试,有调试信息,方便调试,体积也更大;release版本用于发布,体积更小;在使用cmake针对debugrelease配置时也存在一定的不......