Linux构建C++环境

1. 基本流程

【Linux c++实战】手把手教你在linux上从零搭建c++项目,并详细介绍Cmake(C++|Cmake|Ubuntu)
以hello world为例:

  1. 创建cpp文件,写好代码
#include<iostream>
int main()
{
    std::cout << "Hello World From CXX" << std::endl;
    return 0;
}
  1. 编译运行
g++ hello.cpp -o hello_cpp
./hello_cpp

2. 用CMake构建工程

安装cmake:

ubantu:apt-get install cmake  	或 	sudo apt install camke
centos用yum

2.1 建立工程目录(自己手动新建文件夹)

标准的工程目录:

文件夹说明
include存放头文件(.h)每个c++程序通常都由头文件(.h)和源文件组成(.cpp)
src存放源文件(.cpp)
build存放构建生成时生成的临时文件、可执行文件
CmakeLists.txtCMake指导文件

2.2 编写CmakeLists

编译多个文件的古老方法就是编写makefile,用于说明各个c++文件的依赖关系,然后用一款make软件来构建程序,make会用到makefile文件(需手动编写)和g++编译器。

然而makefile的规则很复杂。因此更现代的构建工具cmake应运而生。

cmake主要分为三步:
①先编写Cmake指导文件CmakeLists.txt
②用Cmake生成makefile文件
③make构建工程

需要关注的是CmakeLists.txt,其编写如下:

# 项目名称
project (sunnet)
# CMake最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 头文件目录
include_directories(include)
# 查找./src目录下的所有源文件,保存到DIR_SRCS变量
aux_source_directory(./src DIR_SRCS)
# 用C++11
add_definitions(-std=c++11)
# 指定生成目标文件
add_executable(sunnet ${DIR_SRCS})
# 库文件
find_package (Threads)
target_link_libraries (sunnet ${CMAKE_THREAD_LIBS_INIT})

主要含义就是:把include文件夹当作头文件目录,把src当成源文件目录,使用c++11的标准

2.3 编写项目文件

头文件(.h)都放到include文件夹,源文件(.cpp)包括main.cpp都放到src文件夹

2.4 编译运行

切换至bulid文件夹,执行编译命令

cd build
cmake ../
make

最终运行成功后就会在build文件夹中看到这些内容:
在这里插入图片描述
sunset 是对应的可执行文件。

运行:得到对应结果

./sunnet

3. 集成开发环境(IDE)

Linux 下常用的 C/C++ IDE 还是比较多的;主要有qtcreator、vscode、clion。

切记:编译C++时要使用g++编译,使用gcc可能会有一些链接和定义的问题出现

3.1 qtcreator

3.2 VSCode

linux环境下基于VSCode配置多目录C/C++编译调试环境
vscode编译多文件的方法(C和C++通用)
插件:

  1. C/C+//必需
  2. Code Runner//必需
  3. C/C++ Snippets // 建议,提供一些常用的C/C++片段
  4. EPITECH C/C++ Headers // 建议,为C/C++文件添加头部(包括作者、创建和修改日期等),并为.h头文件添加防重复的宏
  5. File Templates // 建议,文件模板,可以自己添加文件模板
  6. GBKtoUTF8 // 建议,GBK编码文件转换为UTF-8
  7. Include Autocomplete // 建议,头文件自动补全
  8. One Dark Pro // 建议,可以打造好看的VS Code主题

launch.json文件:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}/${fileBasenameNoExtension}.out", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录
            "environment": [], 
            "externalConsole": false, // 调试时是否显示控制台窗口,一般设置为true显示控制台,
                                      // 但是最新版cpptools有BUG,具体请看文末的注意
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
            "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
            "miDebuggerPath": "gdb", // 调试器路径,Windows下后缀不能省略,Linux下则去掉
            "setupCommands": [ // 用处未知,模板如此
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
        }
    ]
}

task.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
            "command": "g++", // 要使用的编译器, C就写gcc
            "args": [
                "${file}",
                "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
                "${fileDirname}/${fileBasenameNoExtension}.out",
                "-g", // 生成和调试有关的信息
                //"-Wall", // 开启额外警告
                "-static-libgcc", // 静态链接
                "-std=c11" // C语言最新标准为c11,或根据自己的需要进行修改比如C++17
            ], // 编译命令参数
            "type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
            "group": {
                "kind": "build",
                "isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
            },
            "presentation": {
                "echo": true, 
                "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
                "focus": true, // 设为true后可以使执行task时焦点聚集在终端
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
            //"problemMatcher": "$gcc"
        }
    ]
}
对于在Linux上配置C++环境来使用VSCode,您可以按照以下步骤进行操作: 1. 首先,确保您的Linux系统已经安装了GCC编译器。如果没有安装,可以通过运行以下命令来安装: ``` sudo apt update sudo apt install build-essential ``` 2. 接下来,您需要安装Visual Studio Code(VSCode),您可以从官方网站下载适用于Linux的VSCode安装包,并按照提示进行安装。 3. 安装好VSCode后,打开它,并在扩展商店中搜索并安装"C/C++"扩展。这个扩展提供了C++语言的支持。 4. 安装完成后,您需要在VSCode中打开您的C++项目文件夹。您可以选择"文件"->"打开文件夹"来打开项目文件夹,或者在终端中使用命令`code <your_folder_path>`来打开。 5. 在VSCode中打开项目文件夹后,您需要创建一个`tasks.json`文件来配置构建任务。您可以通过选择"查看"->"命令面板"(或使用快捷键`Ctrl+Shift+P`)来打开命令面板,然后输入"Configure Task"并选择"Configure Default Build Task"来创建一个默认的构建任务。 6. 在弹出的选项中,选择"C/C++: g++ build active file"。这将会在当前活动的文件上运行g++编译器来构建您的代码。如果您希望使用自定义的编译选项,您可以在创建`tasks.json`文件后进行修改。 7. 现在,您可以按下`Ctrl+Shift+B`来运行构建任务,或者通过选择"终端"->"运行生成任务"来执行构建任务。这将会在终端中显示编译和链接的输出。 8. 最后,您可以通过在VSCode中选择"调试"->"启动调试"来配置和启动调试器。您可以选择"C++ (GDB/LLDB)"配置,并根据您的需要进行调试器设置。 通过以上步骤,您就可以在Linux上使用VSCode进行C++编程了。希望对您有所帮助!如果您有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值