Ubantu下VSCode安裝和使用,make及cmake使用,opencv安裝與配合CMakeLists.txt使用


一.安裝VSCode

1.通過官方PPA安裝Ubuntu make

sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
sudo apt-get update
sudo apt-get install ubuntu-make

2.使用命令安裝visual studio code(記住安裝目錄)

umake ide visual-studio-code

3.若安裝完成,圖標卻沒有出現

啟動器如果沒有顯示VSCode的圖標,可以進入剛安裝的目錄,執行“./code"運行,右鍵添加即可

4.卸載VSCode

umake ide visual-studio-code  --remove

二.建立工程

(原博客:https://blog.csdn.net/weixin_43374723/article/details/84064644)

1.由於VScode是以文件夾的形式管理工程的,因此我們首先新建一個文件夾,我這里取名叫hello

2.然后通過VScode打開此文件夾

3.新建main.cpp文件並輸入程序

三.更改配置文件

1.添加構建(編譯、鏈接等)任務(tasks.json)

ctrl+shift+p打開命令行,輸入Tasks: Run task==》 Create tasks.json file from template, 生成默認的tasks.json文件。

2.更改配置文件(launch.json)

點擊左側的Debug按鈕,選擇添加配置(Add configuration),然后選擇C++(GDB/LLDB),將自動生成launch.json文件默認launch.json

3.和Makefile結合

修改的地方已用灰色標注

修改后的tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0", 
    "tasks": [
        {
            "type": "shell",  //任務執行的是shell命令
            "label": "build",  //和launch.json中的"preLaunchTask": "build-debug"相對應
            "command": "/usr/bin/make",  //表示執行make命令(注,文件夾下需要Makefile文件),在shell中使用命令,如需加參數,可再添加args屬性
        }
    ]
}

修改后的launch.json

{
    // 使用 IntelliSense 了解相關屬性。 
    // 懸停以查看現有屬性的描述。
    // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",  //啟動配置的下拉菜單中顯示的名稱
            "type": "cppdbg",  // 配置類型,這里只能為cppdbg
            "request": "launch",  // 請求配置類型,可以為launch(啟動)或attach(附加) 
            "program": "${fileDirname}/../hello",  // 將要進行調試的程序的路徑和makefile中生成的可執行文件一致
            "args": [],  // 程序調試時傳遞給程序的命令行參數,一般設為空即可
            "stopAtEntry": true,  // 設為true時程序將暫停在程序入口處
            "cwd": "${workspaceFolder}",  // 調試程序時的工作目錄,一般為${workspaceFolder}即代碼所在目錄
            "environment": [],
            "externalConsole": true,  // 調試時是否顯示控制台窗口
            "MIMode": "gdb",  // 指定連接的調試器,可以為gdb或lldb
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"  // 調試會話開始前執行的任務,一般為編譯程序。與tasks.json的"label"相對應( 一致),可根據需求選擇是否使用
        }
    ]
}

四.makefile

(轉自:https://blog.csdn.net/weixin_38391755/article/details/80380786)

1.首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,這個動作叫做編譯(compile)。然后再把大量的Object File合成執行文件,這個動作叫作鏈接(link)。

2. 編譯時,編譯器需要的是語法的正確,函數與變量的聲明的正確。對於后者,通常是你需要告訴編譯器頭文件的所在位置(頭文件中應該只是聲明,而定義應該放在C/C++文件中),只要所有的語法正確,編譯器就可以編譯出中間目標文件。一般來說,每個源文件都應該對應於一個中間目標文件(.o 文件或是OBJ文件)。 
3.鏈接時,主要是鏈接函數和全局變量,所以,我們可以使用這些中間目標文件(O文件或是OBJ文件)來鏈接我們的應用程序。鏈接器並不管函數所在的源文件,只管函數的中間目標文件(Object File),在大多數時候,由於源文件太多,編譯生成的中間目標文件太多,而在鏈接時需要明顯地指出中間目標文件名,這對於編譯很不方便,所以,我們要給中間目標文件打個包,在Windows下這種包叫“庫文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件

4.我們要寫一個Makefile來告訴make命令如何編譯和鏈接這幾個文件。我們的規則是:

1.如果這個工程沒有編譯過,那么我們的所有C文件都要編譯並被鏈接。 2.如果這個工程的某幾個C文件被修改,那么我們只編譯被修改的C文件,並鏈接目標程序。 3.如果這個工程的頭文件被改變了,那么我們需要編譯引用了這幾個頭文件的C文件,並鏈接目標程序。

5.Makefile的規則

target... : prerequisites ... command ... ... -------------------------------------------------------------------------------

target也就是一個目標文件,可以是Object File,也可以是執行文件。還可以是一個標簽(Label),對於標簽這種特性,在后續的“偽目標”章節中會有敘述。

prerequisites就是,要生成那個target所需要的文件或是目標。

command也就是make需要執行的命令。(任意的Shell命令)

這是一個文件的依賴關系,也就是說,target這一個或多個的目標文件依賴於prerequisites中的文件,其生成規則定義在command中

注:

在看別人寫的Makefile文件時,你可能會碰到以下三個變量:$@,$^,$<代表的意義分別是:
他們三個是十分重要的三個變量,所代表的含義分別是:

$@--目標文件 $^--所有的依賴文件 $<--第一個依賴文件

6.一個示例

正如前面所說的,如果一個工程有1個頭文件,和2個C文件

//solution.h

class Solution {
 public:
     void Say();
};


//solution.cpp

#include <iostream>
#include "solution.h"
using namespace std;
void Solution::Say(){
   std::cout << "HI!" << std::endl;
}


//main.cpp

#include "solution.h"
int main () {
     Solution sln;
     sln.Say();
     return 0;
 }

我們為了完成前面所述的那三個規則,我們的Makefile應該是下面的這個樣子的。

hello:main.o solution.o 
    g++ -o hello main.o solution.o 
main.o:main.cpp solution.h 
    g++ -g -c main.cpp 
solution.o:solution.h solution.cpp 
    g++ -g -c solution.cpp 
clean:
    rm main.o solution.o hello

特別注意command也就是make需要執行的命令前是一個Tab鍵

 反斜杠(\)是換行符的意思。這樣比較便於Makefile的易讀。我們可以把這個內容保存在文件為“Makefile”或“makefile”的文件中,然后在該目錄下直接輸入命令“make”就可以生成執行文件edit。如果要刪除執行文件和所有的中間目標文件,那么,只要簡單地執行一下“make clean”就可以了。

五:cmake與CMakeLists.txt

(參考博客:https://blog.csdn.net/kai_zone/article/details/82656964)

六.opencv的安裝配合cmake使用

opencv的安裝:https://blog.csdn.net/jindunwan7388/article/details/80397700

        官方文檔:https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM