前言:前面的文章介紹了在Windows平臺之下使用Ming-win64和MSVC搭建C/C++的開發環境,本文開始介紹在Linux平臺之下如何搭建開發環境。可以參考前面兩篇文章:
VSCode開發C、C++環境搭建系列(一)——基於Mingw-w64搭建
VSCode開發C、C++環境搭建系列(三)——基於MSVC搭建
一、基本的軟件安裝
gcc
g++
make
cmake
這四個是缺一不可的
本文介紹的是簡單的只包含幾個源文件的C開發,所以make和cmake暫時用不到。
另外關於編輯器vs code的使用和windows上面幾乎每什麼區別,這裏不再贅述。
二、開發環境搭建關鍵的路徑搜索
2.1 頭文件的搜索
gcc 在編譯時如何去尋找所需要的頭文件:
(1)編譯器指定的參數 -I 給出的頭文件包含路徑
(2)然後找gcc的環境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH(分別對應C、C++、objective-C的頭文件)
(3)GCC標準安裝目錄,系統標準include路徑。安裝GCC套件的時候可以通過--prefix參數手動指定安裝位置。
默認的安裝位置在:
gcc/x86_64-linux-gnu/7/
在這個文件夾之下包含了很多的頭文件以及庫文件
(4)內定目錄,不需要自己額外聲明以及添加的目錄
/usr/include 及其下面的子目錄
/usr/local/include 及其下面的子目錄(centos7中該目錄下是空的)
2.2 靜態庫文件
(1)gcc在編譯的時候通過 -L參數 手動指定的搜索路徑
(2)再找gcc的環境變量LIBRARY_PATH
(3)再找內定目錄,這是這些安裝GCC套件的時候所安裝的那些目錄
/lib和/lib64
/usr/lib 和/usr/lib64
/usr/local/lib和/usr/local/lib64
2.3 運行時動態庫的搜索路徑
動態庫的搜索路徑搜索的先後順序是:
(1)編譯目標代碼時使用 -L參數 指定的動態庫搜索路徑;
(2)環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
(3)配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
(4)再找內定目錄,這是這些安裝GCC套件的時候所安裝的那些目錄/lib和/lib64
/usr/lib 和/usr/lib64
/usr/local/lib和/usr/local/lib64
三、基本配置與簡單實驗
3.1 配置c_cpp_properties.json 文件
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**" //頭文件以及庫文件的搜索路徑也可以添加進去
],
"defines": [],
"compilerPath": "/usr/bin/gcc", //編譯器路徑
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
3.2 配置生成任務的tasks.json文件
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args":[
"-g","test.cpp","-o","test.out" //其實就是編譯,這裏指定編譯的參數
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
3.3 配置調試的launch.json文件
{
// 使用 IntelliSense 瞭解相關屬性。
// 懸停以查看現有屬性的描述。
// 欲瞭解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/test.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
3.4 實驗代碼
#include <iostream>
int main(int argc, char const *argv[])
{
for(int i=0;i<5;i++)
{
std::cout<<i<<std::endl;
}
std::cout<<"this is my first linux program!";
getchar();
return 0;
}
/*
0
1
2
3
4
this is my first linux program
*/
說明:上面僅僅是演示了簡單的C文件的編譯以及運行,如果對於一個比較大的工程文件,make和cmake工具是必不可少的,所以後面會針對這兩個最難的點進行說明,vs code也可以和這些工具配合起來,做成一個比較強大的集成開發環境。