vscode基於Linux和Windows下c/c++的多檔案編譯與串連

來源:互聯網
上載者:User

標籤:vscode   c/c++   

    有時寫寫小程式,又不想啟動2013,vscode就成了我的首選。剛接觸vscode的時候,跟著網上配置了一堆東西,總算能編譯C/C++了,但一涉及到多檔案,我還得乖乖的開啟vs2013。前些天在配置Linux上的vscode的時候,突然發現有網友在tasks.json中的command是make,突然來了興緻,想到既然用make,那我只要一個makefile,然後Ctrl+Shift+B,在vscode上多檔案編譯串連這個問題不就能解決了嗎。於是動手開始按著那位網友的配置寫好了tasks.json。但最終make命令執行失敗,說是找不到target什麼的(忘了),但我不甘心,於是又是百度又是google,搜尋了差不多兩個小時都沒有找到有效解決方案。

    當再次仔細看我的配置的時候,游標移到command上的時候,出現了一個提示“The command to be executed. Can be an external program or a shell command.”。看到shell命令也可以的時候感覺要吐血了,感覺我浪費了寶貴的兩個小時,明明用shell指令碼就變得很簡單了,有多簡單?看圖

tasks.json

650) this.width=650;" src="https://s5.51cto.com/oss/201711/14/fe5136e9a44664f158830732927b1db8.png-wh_500x0-wm_3-wmp_4-s_3925895305.png" title="Screenshot from 2017-11-12 22-08-52.png" alt="fe5136e9a44664f158830732927b1db8.png-wh_" />

    .make.sh

650) this.width=650;" src="https://s1.51cto.com/oss/201711/14/d284830aa348c9dbed7e21e53bcaa015.png-wh_500x0-wm_3-wmp_4-s_1949619370.png" title="Screenshot from 2017-11-12 22-10-10.png" alt="d284830aa348c9dbed7e21e53bcaa015.png-wh_" />

簡單吧,就是通過vscode將檔案的目錄${fileDirName}作為參數傳給.make.sh,在指令碼裡進入這個目錄後,再make一下就好了。

    以下測試通過

    

//test.h#ifndef _MULTI_FILE_TEST_#define _MULTI_FILE_TEST_#include <stdio.h>void print();#endif//tesh.c#include "test.h"void print(){    printf("hello world!\n");}//main.c#include "test.h"int main(){    print();    return 0;}

Ctrl+Shift+B前

650) this.width=650;" src="https://s1.51cto.com/oss/201711/14/d368a97c89b24edfbe3c93a2f8cb1a6f.png-wh_500x0-wm_3-wmp_4-s_307113813.png" style="float:none;" title="Screenshot from 2017-11-14 15-16-44.png" alt="d368a97c89b24edfbe3c93a2f8cb1a6f.png-wh_" />

Ctrl+Shift+B後

650) this.width=650;" src="https://s3.51cto.com/oss/201711/14/43309c45db4bdbdc34376471be223aa2.png-wh_500x0-wm_3-wmp_4-s_2908942398.png" style="float:none;" title="Screenshot from 2017-11-14 15-17-28.png" alt="43309c45db4bdbdc34376471be223aa2.png-wh_" />

debug

650) this.width=650;" src="https://s2.51cto.com/oss/201711/14/3d57969dbc0bcfa34d34a2e7b6a7f19e.png-wh_500x0-wm_3-wmp_4-s_2414184915.png" title="Screenshot from 2017-11-14 15-27-02.png" alt="3d57969dbc0bcfa34d34a2e7b6a7f19e.png-wh_" />

至此,Linux上的vscode配置大功告成啦,在Windows是其實同理寫一個簡單的批處理就好,不過首先要mingw32,安裝並且配置好gcc/g++環境,另外,mingw32的bin下沒有make.exe,但有一個mingw32-make.exe,將它改成make就好,不改也行,不過相應的批次檔裡就寫mingw32-make而不是make,不多說,貼上windows的配置圖

650) this.width=650;" src="https://s4.51cto.com/oss/201711/14/98a701c9be7ae0fadf7dc60d26d313d2.png-wh_500x0-wm_3-wmp_4-s_3281585569.png" style="float:none;" title="愛奇藝20171114153542.png" alt="98a701c9be7ae0fadf7dc60d26d313d2.png-wh_" />

650) this.width=650;" src="https://s4.51cto.com/oss/201711/14/6f72fde3022d39d0eda39dd2c25cf505.png-wh_500x0-wm_3-wmp_4-s_3405848672.png" style="float:none;" title="愛奇藝20171114153746.png" alt="6f72fde3022d39d0eda39dd2c25cf505.png-wh_" />

最後順便貼一下我的makefile和launch.json吧

Linux下makefile

.SUFFIXES:.c .oCC=gccSRCS=main.ctest.cOBJS=$(SRCS:.c=.o)EXEC=mainbuild:$(OBJS)$(CC) -o $(EXEC) $(OBJS)@echo ‘---------------OK---------------‘.c.o:$(CC) -Wall -g -o [email protected] -c $<clean:rm -f $(OBJS)rm -f $(EXEC)


Linux下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",            "request": "launch",            "program": "${workspaceFolder}/${fileBasenameNoExtension}",            "args": [],            "stopAtEntry": false,            "cwd": "${workspaceFolder}",            "environment": [],            "externalConsole": true,            "MIMode": "gdb",            "setupCommands": [                {                    "description": "Enable pretty-printing for gdb",                    "text": "-enable-pretty-printing",                    "ignoreFailures": true                }            ]        }    ]}


Windows下makefile

.SUFFIXES:.c .oCC=gccSRCS=main.c    test.cOBJS=$(SRCS:.c=.o)EXEC=main.exebuild:$(OBJS)    $(CC) -o $(EXEC) $(OBJS)    @echo ‘---------------OK---------------‘.c.o:    $(CC) -Wall -g -o [email protected] -c $<clean:    del $(OBJS)    del $(EXEC)


Windows下launch.json

{"version": "0.2.0","configurations": [{"name": "C++ Launch (GDB)",                 // 配置名稱,將會在啟動配置的下拉式功能表中顯示"type": "cppdbg",                           // 配置類型,這裡只能為cppdbg"request": "launch",                        // 請求配置類型,可以為launch(啟動)或attach(附加)"targetArchitecture": "x86",                // 產生目標架構,一般為x86或x64,可以為x86, arm, arm64, mips, x64, amd64, x86_64"program": "${fileDirname}/${fileBasenameNoExtension}.exe",  // 將要進行調試的程式的路徑"miDebuggerPath":"D:/MinGW32/mingw32/bin/gdb.exe", // miDebugger的路徑,注意這裡要與MinGw的路徑對應"args": ["blackkitty",  "1221", "# #"],     // 程式調試時傳遞給程式的命令列參數,一般設為空白即可"stopAtEntry": false,                       // 設為true時程式將暫停在程式入口處,一般設定為false"cwd": "${fileDirname}",                  // 偵錯工具時的工作目錄,一般為${workspaceRoot}即代碼所在目錄"externalConsole": true                   // 調試時是否顯示控制台視窗,一般設定為true顯示控制台}]}


本文出自 “11662416” 部落格,請務必保留此出處http://11672416.blog.51cto.com/11662416/1981689

vscode基於Linux和Windows下c/c++的多檔案編譯與串連

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.