linux下C++开发

目录

一、 开发环境搭建

1.安装GCC,GDB

2.安装CMake

二、 GCC编译器

1. 编译过程

2. 编译一个cpp文件并执行

3. G++的重要编译参数

三、linux下vscode的使用

1. 安装

2.使用

3.快捷键

四、 cmake的使用

1. 介绍:

2. 语法特性:

3.重要指令

cmake_minimum_required - 指定cmake的最小版本要求

project - 定义工程名称,并可指定工程支持度的语言

set - 显示定义变量

include_directories - 向工程添加多个特定库文件搜索路径

add_library - 生成库文件

add_compile_options - 添加编译参数

add_executable - 生成可执行文件

aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中这个指令常被临时用来自动构建源文件列表


一、 开发环境搭建

操作系统:Ubuntu64位

1.安装GCC,GDB

执行一下指令安装编译器和调试器:


sudo apt update // apt相当于手机中的应用市场

sudo apt install build-essetial gdb 

安装成功确认:

gcc --version
g++ --version
gdb --version

//如果成功,则显示版本号

2.安装CMake

指令:

sudo apt install cmake

安装成功确认:

cmake --version

操作系统:CentOS、Alibaba

1.安装GCC,GDB


yum -y install gcc

yum -y install gcc-c++

yum install gdb

安装成功确认:

gcc --version
g++ --version
gdb --version

//如果成功,则显示版本号

二、 GCC编译器

1. 编译过程

第一步:预处理

将源代码的.c 、.cpp 、.h 等文件包含到一个文件中,预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。

第二步:编译

编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。

第三步:汇编

汇编器是将汇编代码转变成机器可以执行的命令。

第四步:链接

将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。

2. 编译一个cpp文件并执行

g++ test.cpp -O test2

./ test2

3. G++的重要编译参数

-g

作用:高数GCC产生能被 GNU 调试器GDB使用的信息,以便调试程序。

使用:

g++ -g test.cpp -o test

-o

种类:

  • -O  主要进行跳转和延迟退栈两种优化;
  • -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
  • -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
  • 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。

作用:告诉 GCC 对源代码进行基本优化告诉 GCC 对源代码进行基本优化。

使用:

g++ -o2 test.cpp -o test

-I

作用:

用来指定头文件目录。/usr/include目录一般是不用指定的,gcc知道默认去/usr/include找,但 是如果头文件不在/usr/icnclude里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。

使用:

g++ -I/myinclude test.cpp

 -Wall

 作用:打印出gcc提供的警告信息

使用:

g++ -wall test.cpp

-std=c++11

作用:使用c++11标准编译

使用:

g++ -std=C++11 test.cpp

-o

作用:指定输出文件名,不加参数默认生成a.out文件

使用:

三、 GDB调试器

首先要生成可调试的可执行文件,加 -g 参数。

开始调试:

gdb xxx

 清屏:

shell clear

加断点、查看所有断点信息

b 行数

info break ==  i b

显示代码信息

 * list :显示程序中的代码,常用使用格式有:

    list

      输出从上次调用list命令开始往后的10行程序代码。

    list -

      输出从上次调用list命令开始往前的10行程序代码。

    list n

      输出第n行附近的10行程序代码。

    list function

      输出函数function前后的10行程序代码。

 打印变量信息:

p

 GDB常用命令大全 GDB 命令详细解释_Rolei_kezhu的博客-CSDN博客_gdb命令

三、linux下vscode的使用

1. 安装

在应用商店搜索vscode安装即可。

2.使用

打开终端执行相应命令即可

3.快捷键

  • F11键:全屏操
  • 分屏: ctrl + \
  • 打开终端:ctrl + ·
  • 格式化代码:Ctrl + shift + I
  • 批量重新名:F2
  • 移动行数:alt+ 箭头
  • 全局搜索: 【放大镜】图标

四、 cmake的使用

1. 介绍

当多个人用不同的语言或编译器开发一个项目,最终要输出一个可执行文件或共享库(dll等等),这时候cmake神器就出现了。跨平台!!!

2. 语法特性:

基本语法格式:指令(参数1 参数2…)

  • 参数使用括号括起
  • 参数之间使用空格分号分开

指令是大小写无关的,参数和变量是大小写相关的

set(Hello hello.cpp)
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp ${HELLO})

变量使用${}方式取址,但是在IF控制语句中是直接使用变量名

3.重要指令

cmake_minimum_required - 指定cmake的最小版本要求

语法:

camke_minimum_required(VERSION versionNumber [FATAL_ERROR])

示例:

cmake_minimum_required(VERSION 3.21.1)

project - 定义工程名称,并可指定工程支持度的语言

语法:

project(projectName[CXX][C][JAVA])

示例:

project(helloWorld)

set - 显示定义变量

语法:

set(VAR [VALUE] [CACHE TYPE DECSTRING [FORCE]])

示例:

#定义变量 SRC ,其值为 hello.c main.c

set(SRC hello.c main.c)

include_directories - 向工程添加多个特定库文件搜索路径

语法:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2)

示例:

# 相当于指定编译器的 -I 参数

# 路径可以是绝对和相对路径

include_directories(./inc ./include)

语法:

link_directories(dir1 dir2 …)

示例:

# 将 ./lib 文件添加到库文件搜索路径

link_directories(./lib)

add_library - 生成库文件

语法:

add_library(libName [SHARED | STATIC | MODULE | EXCLUDE_FROM_ALL] source1 source2 …)

示例:

# 通过变量 SRC 生成 libhello.so 共享库

add_library(hello SHARED ${SRC})

add_compile_options - 添加编译参数

语法:

add_compile_options( option …)

示例: 

# 添加编译参数 -Wall -std=c++11 -o2

add_compile_options(-Wall -std=c++11 -O2)

add_executable - 生成可执行文件

语法:

add_executable(exename source1 source2 …)

示例:

# 编译 main.cpp 生成  main 的可执行文件

add_executable(mian mian.cpp)

语法:

arget_link_libraries(target library1<debug | optimized> library2 …)

示例:

# 将 hello 动态文件链接到可执行文件 main

target_link_libraries(main hello)

向当前工程添加存放源文件的子目录
可以指定中间二进制和目标二进制存放的位置

语法:


add_subdirectory(source_dir [binaryDir] [EXCLUDE_FROM_ALL])

 示例:

# 添加src子目录,注:src 中需要有一个 CMakeLists.txt 文件

add_subdirectory(src)
 

aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中
这个指令常被临时用来自动构建源文件列表

语法:


aux_source_directory(dir VARIABLE)

例子:


定义 SRC 变量,其值为当前目录下所有源代码文件

aux_source_directory(. SRC)

编译 SRC 变量所代表的源代码文件,生成 main 可执行文件

add_executable(main ${SRC})

五.  开发方式

目前了解到的有几种:

  1. Visual Studio 连接远程linux服务器开发
  2. 桌面版linux 利用vscode开发

VS连接服务器Ubuntu:

检查服务器ssh状态:

systemctl status sshd

 杀死某一个进程:

sudo kill -9 xxx //xxx为进程号

安装ssh:

sudo apt install openssh-server

  • 12
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LinuxC++开发是一种非常流行的编程方式,它可以利用Linux操作系统的优势,如高效、稳定和安全等特点,来进行C++程序的开发。在Linux下,C++开发者可以使用各种开发工具和库,如GCC编译器、Makefile、GDB调试器、Boost库等,来提高开发效率和程序质量。此外,LinuxC++开发还可以利用开源社区的力量,获取更多的资源和支持,从而更好地完成项目开发。 ### 回答2: Linux下C语言开发是一种基于Linux操作系统的程序开发方式,其最大的特点是开放源代码以及高度可自由配置的性质。Linux作为一款优秀的开源操作系统,广泛应用于互联网、移动设备和服务器等领域,其稳定、高效的运行性能和运维优势已深受众多企业和开发人员的青睐。 在Linux下使用C语言进行开发,需要掌握一定的基础知识和技能。首先,需要了解Linux系统的基本命令和操作,对于C语言的基础语法也需要掌握。其次,需要选择一款适合自己的C语言编译器,比如常用的gcc。针对Linux特殊的操作环境和调试、编译等方面,也需要额外学习相应的技能。 在进行Linux下C语言开发时,首先需要确定开发目标。目前,在Linux下的C语言开发可以包括应用程序、系统程序、嵌入式开发等。针对不同的开发目标,需要使用不同的开发工具和编译器。 在编写程序时,需要注意Linux系统的特殊性。比如,在Linux开发时需要使用头文件"unistd.h",使用fork()函数来创建新的进程。此外,由于Linux是多用户系统,所以需要进行用户和权限管理。同时,还需要注意程序的异常处理和错误输出等方面。 总的来说,Linux下的C语言开发是一项具有挑战性的工作,但其广泛应用和灵活性也为开发人员提供了很大的创造空间。通过深入的学习和实践,开发人员可以掌握Linux下C语言开发技能,为自己的事业发展和成长打下坚实的基础。 ### 回答3: 作为一位开发人员,从Windows转到Linux上做C开发,会面临不少挑战和改变。首先需要熟悉Linux的操作系统结构和命令行,了解不同的发行版之间的差异,这对于日常的开发来说非常重要。以下是几个值得注意的方面: 1.开发环境 最基础的开发环境包括GCC和GDB,这些开源工具在Linux上免费获得。如果需要集成开发环境(IDE),则可以选择Eclipse、Code::Blocks或者KDevelop。在部署时,通常使用GNU Autotools或CMake自动化构建工具。 2.编译器 在Linux上,GCC是一个标准的编译器,它支持多个平台和架构上的编译,包括ARM、x86、PPC和MIPS。GCC 的源代码是开源的,使得开发人员可以通过了解源代码的方式来增强对编译器的理解。 3.调试工具 调试工具推荐使用 GDB,这是一个命令行工具,可以进行高效的调试,以及研究你的代码中有可能出现的漏洞或者错误。另外,Valgrind工具可以用来检测内存泄漏问题以及程序的性能分析。 4.Linux 系统调用 Linux系统提供了大量的系统调用,其中一些是比较常用的,如read( ),write( ),open( )和close( )。开发人员需要从C标准库中了解并使用这些系统调用。 5.理解文件系统 Linux提供了一个树形文件系统,需要熟悉不同的目录及其作用,理解Linux文件系统的概念是非常重要的。当你编写的C程序需要读取或写入文件时,你需要确定文件系统中的路径和文件权限。在Linux上,路径名中的所有字符都是小写字母。 总的来说,Linux下的C开发需要对操作系统的了解比较深入,因此要花费比较长的时间去了解和学习。但是一旦掌握了Linux的知识之后,在开发时会发现Linux下的工具链和命令行的终端有很多实用性,它们都有助于提高代码的效率和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值