| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Linux学习日记22——vscode和cmake -> 正文阅读 |
|
[开发工具]Linux学习日记22——vscode和cmake |
学习视频链接? 目录 5.2?编写 CMakeLists.txt 构建项目编译规则、使用外部构建,手动编译 CMake 项目 一、安装相应的软件1.1 安装cmakesudo apt update 更新软件包来源 sudo apt install cmake 安装cmake cmake --version 查看是否安装成功 1.2 安装vscode? 二、g++编译相关参数2.1 -g1、作用 编译带调试信息的可执行文件 2、案例 g++ -g test.cpp -o test 2.2 -O[n]1、作用 优化源码 2、案例 -O 同时减小代码的长度和执行时间,其效果等价于 -O1 -O0 表示不做优化 -O1 为默认优化 -O2 除了完成 -O1 的优化之外,还进行一些额外的调整工作,如指令调整等 -O3 则包括循环展开和其他一些与处理特性相关的优化工作 选项将使编译的速度比使用 -O?时慢,但通常产生的代码执行速度会更快 g++ -O2 test.cpp -o test 3、测试 ? 2.3?-l 和 -L1、作用 指定库文件 | 指定库文件路径 2、案例 (1) -l 参数(小写)就是用来指定程序要链接的库,-l?参数紧接着就是库名 在 /lib 和 /usr/lib 和 /usr/local/lib 里的库直接用 -l 参数就能链接 链接 glog 库 g++ -lglog test.cpp -o test (2) 如果库文件没放在上面三个目录里,需要使用 -L 参数(大写)指定库文件所在目录 -L 参数跟着的是库文件所在的目录名 链接 mytest 库,libmytest.so 在 /home/bing/mytestlibfolder 目录下 g++ -L/home/bing/mytestlibfolder -lmytest test.cpp -o test 2.4 -I1、作用 指定头文件搜索目录 2、案例 /usr/include 目录一般是不用指定的,gcc 知道去那里找,但是如果头文件不在 /usr/icnclude 里我们就要用 -I?参数指定了,比如头文件放在 /myinclude 目录里,那编译命令行就要加上 -I/myinclude 参数了,如果不加你会得到一个 "xxxx.h: No such file or directory" 的错误。-I 参数可以用相对路径,比如头文件在当前目录,可以用 -I . 来指定 g++ -I/myinclude test.cpp -o test 2.5 警告信息2.6 设置编译标准和输出文件名2.7 查看手册man gcc 三、编译C++项目3.1 打开vscode3.2 编写项目3.3 编译项目四、CMake4.1 简介cmake 是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程) CMake 是大部分 C++ 开源项目标配 4.2 语法特性介绍1、基本语法格式 (1) 指令(参数1 参数2 ...) ????????参数使用括弧括起 ????????参数之间使用空格或分号分开 (2) 指令是大小写无关的,参数和变量是大小写相关的
4.3 重要指令和 CMake 常用变量1、重要指令 (1)cmake_minimum_required? ? 指定 CMake 的最小版本要求 语法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])
语法:project(projectname [CXX] [C] [Java])
(3)set? ? 显式的定义变量 语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
语法:include_directories([AFTER | BEFORE] [SYSTEM] dir1 dir2 ...)
语法:link_directories(dir1 dir2 ....)
(6)add_ library? ? 生成库文件 语法: add_ library(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
语法:add_compile_options(<option> ...)
语法:add_library(exename source1 source2 ... sourceN)
(9)target_link libraries? ? 为 target 添加需要链接的共享库 ---> 相同于指定 g++ 编译器 -I 参数 语法:target link_libraries(target library1<debug | optimized> library2...)
语法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
语法:aux_source_directory(dir VARIABLE)
2、CMake 常用变量 (1)CMAKE_C_FLAGS gcc 编译选项 (2)CMAKE_CXX_FLAGS g++ 编译选项
PROJECT_BINARY_DIR <projectname>_BINARY DIR a. 这三个变量指代的内容是一致的 b. 如果是 in source build,指的就是工程顶层目录 c. 如果是 out-of-source 编译指的是工程编译发生的目录 d. PROJECT_BINARY_DIR 跟其他指令稍有区别,不过现在,你可以理解为他们是一致的 (5)CMAKE_SOURCE_DIR PROJECT_SOURCE_DIR <projectname>_SOURCE_DIR a. 这三个变量指代的内容是一 致的,不论采用何种编译方式,都是工程顶层目录 b. 也就是在 in source build 时,他跟 CMAKE_BINARY_DIR 等变量一致 c. PROJECT_SOURCE_DIR 跟其他指令稍有区别,现在,你可以理解为他们是一致的 (6)CMAKE_C_COMPILER:指定 C 编译器 (7)CMAKE_CXX_COMPILER:指定 C++ 编译器 (8)EXECUTABLE_OUTPUT_PATH:可执行文件输出的存放路径 (9)LIBRARY_OUTPUT_PATH:库文件输出的存放路径 4.4 CMake 编译工程CMake 目录结构:项目主目录存在一个 CMakeLists.txt 文件 两种方式设置编译规则: a. 包含源文件的子文件夹包含 CMakeLists.txt 文件,主目录的 CMakeLists.txt 通过 add_subdirectory 添加子目录即可; b. 包含源文件的子文件夹未包含 CMakeLists.txt 文件,子目录编译规则体现在主目录 CMakeLists.txt 中; 1、编译流程 在 linux 平台下使用 CMake 构建 C/C++ 工程的流程如下: a. 手动编写 CmakeLists.txt b. 执行命令 cmake PATH 生成 Makefile( PATH 是顶层 CMakeLists.txt 所在的目录) c. 执行命令 make 进行编译 2、两种构建方式 (1)内部构建 (in-source build):不推荐使用 内部构建会在同级目录下产生一大堆中间文件, 这些中间文件并不是我们最终所需要的,和工程源文件放在一起会显得杂乱无章
(2)外部构建 (out-of-source build):推荐使用将编译输出文件与源文件放到不同目录中
4.5 实战1、编写项目 2、编译 运行可执行文件 ? 3、外部构建 ? 4、项目编译 五、使用vscode进行完整项目开发案例:土兵突击 需求: 1. 兵许三多有一把枪,叫做 AK47 2. 士兵可以开火 3. 士兵可以给枪装填子弹 4. 枪能够发射子弹 5. 枪能够装填子弹--增加子弹数量 开发: 开发枪类 开发士兵类 5.1 合理设置项目目录、编写编译项目源文件1、设置项目目录 2、编写项目 Gun.h
Gun.cpp
Solider.h
Solider.cpp
main.cpp
3、编译项目 5.2?编写 CMakeLists.txt 构建项目编译规则、使用外部构建,手动编译 CMake 项目?给编译添加参数 5.3 配置json文件并调试项目 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:48:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |