【C++】Windows 下使用 Cmake 编译附带第三方库的 C++ 程序

C++ 环境搭建 下载 Cygwin 并安装,选择 Category-Devel,勾选如下 Package: 开发简单 C++ 项目 打开 Cygwin64 Terminal。 mkdir -p /home/dev/cpp-code && cd /home/dev/cpp-code 编辑文件 /home/dev/cpp-code/main.cpp 如下: #include <fmt/core.h> int main() { fmt::print("Hello World!\n"); } 编辑文件 /home/dev/cpp-code/CMakeLists.txt 如下: cmake_minimum_required(VERSION 3.23) project(cpp_code) set(CMAKE_CXX_STANDARD 14) include(FetchContent) FetchContent_Declare( fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git GIT_TAG 9.1.0 ) FetchContent_MakeAvailable(fmt) add_executable(hello_world main.cpp) target_link_libraries(hello_world PRIVATE fmt::fmt) 这里使用了一个第三方库 fmt。 Cmake 编译 执行以下命令编译: cd /home/dev/cpp-code mkdir build && cd build cmake .. make 日志打印如下: $ cmake .. -- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Module support is disabled. -- Version: 9.1.0 -- Build type: -- CXX_STANDARD: 14 -- Performing Test has_std_14_flag -- Performing Test has_std_14_flag - Success -- Performing Test has_std_1y_flag -- Performing Test has_std_1y_flag - Success -- Required features: cxx_variadic_templates -- Configuring done -- Generating done -- Build files have been written to: /home/dev/cpp-code/build $ make [ 20%] Building CXX object _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o [ 40%] Building CXX object _deps/fmt-build/CMakeFiles/fmt.dir/src/os.cc.o [ 60%] Linking CXX static library libfmt.a [ 60%] Built target fmt [ 80%] Building CXX object CMakeFiles/hello_world.dir/main.cpp.o [100%] Linking CXX executable hello_world.exe [100%] Built target hello_world 查看编译后的程序,并运行: ...

十二月 17, 2022  |  263 字  |  总阅读

【MFC】第一次使用 MFC 开发桌面小程序

闲话 2020WUHAN,闲在家没事做,之前也用C语言写了一个小的游戏脚本,只有黑框框,趁这个时间就想给它弄个界面出来。 笔者其实只有非常粗略的编程技术,仅仅略懂C语言和Java。游戏脚本需要非常精准的时间控制函数,而且需要模拟键盘输出,响应键盘输入,运行在windows上,考虑到java的效率问题,选择了C++进行开发。 听说QT和MFC都不错,其实也考虑过imgui,但是那个教程资源很少,有也基本都是英文的,看起来着实费劲。 QT 感觉qt很适合新手,折腾了一番,没一天的时间就把界面折腾出来了,也基本完善了所有功能。但是,qt很不靠谱!做好了程序没法导出exe。用windeployqt工具导出错,查了一下,貌似是现在的版本5.14.0,有这个bug,没法导出。 卸了,装上5.13.3,可以成功导出。但是!我是高分屏,5.13.3界面会自动启用win10缩放,而且禁用缩放也没用。这导致编辑gui的界面被放得过大,不仅操作不方便,而且生成的程序窗口大小和那个不一致,放大ui也不放大字体。5.13.3也不能用。 各种难受。(刚看了眼,5.14.1发布了,想来是可以导出程序了,但怎么说,这种开源项目,出这种莫名其妙的bug,其实很难受。弃了) MFC 听说mfc并不适合新手,确实,但是,visual studio 2019 为mfc 开发提供了很多便捷操作,查查资料,其实并没有那么难(笔者可是0基础,C++都是现学的) vs2019 提供了哪些便捷操作呢?拖放编辑UI(这个和qt一样),类向导可以直接添加消息函数、重载函数,全图形交互式操作(这就不叫敲代码了吧……一键添加代码?) 当然,比起来MFC还是更难,但是mfc发展至今,资料也非常多,常见问题都能找得到,且微软不会像qt这样出一些莫名其妙的bug,mfc发展非常完善。vs2019也比qt creator好用得多(开发qt时我用的vscode写代码),调式功能非常不错,不像qt,出个错误又没有提示信息,有时候摸不着头脑。 学习c++ 菜鸟驿站 非常棒的网站,快速学习主要知识,直接上手,不懂的地方再找资料细看。 学习mfc开发 VC驿站 里面有很多C++相关的教程,笔者专注于看MFC开发那一块。 实用VC++编程之玩转控件 站长在b站上发的mfc教程视频,非常详细,讲解也很清楚。 mfc小程序需要学哪些 仅对于笔者需要的功能来说啊: 创建对话框 使用按钮、文本框、Spin、ComboBox等基础控件 控件设置 添加控件响应 添加菜单 禁止对话框窗口缩放 重载函数使得F1,Esc,Enter键失效 弹出第二个窗口 注册全局热键 读写文件 一一说来。 创建对话框程序 使用vs2019模板创建即可,运行,弹出一个窗口。 基于对话框 + 无增强的MFC控件 + 在静态库中使用MFC 没有mfc模板可能是没有装这个组件,百度即可。具体创建跟着vc驿站的教程视频来。 添加控件 图形交互式操作 设置控件变量名:右键控件——添加变量——设置名称 (变量名更易于自己识别,编写控件事件更方便) 添加响应 - 右键控件——添加事件处理程序——选择类列表:CXXXDlg——更改函数名——选择事件类型 下面有事件说明,大多数时候默认事件是最合适的 添加完成后,会直接跳转到cpp文件中,函数声明、创建,vs2019全部为你做好了,直接在里面添事件代码就行。 控件设置 Spin Control //设置DamageA和DamageB的Spin UDACCEL aclA, aclB; aclA.nInc = 2; aclB.nInc = 10; m_Spin_DamageA.SetRange(0, 9999); m_Spin_DamageA.SetAccel(2, &aclA); m_Spin_DamageA.SetBuddy(GetDlgItem(IDC_EDIT1)); m_Spin_DamageB.SetRange(0, 9999); m_Spin_DamageB.SetAccel(2, &aclB); m_Spin_DamageB.SetBuddy(GetDlgItem(IDC_EDIT2)); 说明: ...

四月 23, 2022  |  655 字  |  总阅读