標籤: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++的多檔案編譯與串連