修正 发现makefile存在问题,仅会编译比main.cpp更新的依赖文件,导致每次都要make两次才能正常调试。已修改$?
为$^
$@ –代表目标文件(target) $^ –代表所有的依赖文件(components) $< –代表第一个依赖文件(components中最左边的那个) $? –代表比目标还要新的依赖文件列表
概述 之前从知乎抄的配置只能编译单文件源文件,编译多文件的话需要手动修改g++编译参数(不能忍啊→_→),于是搜索之,找到解决方案。 关键词:makefile
环境准备 原本使用VSCode就可以正常进行编译调试等操作。 已安装make工具并添加到环境变量,我自己用的是mingw32-make
(也可使用msys提供的工具包,度盘链接: https://pan.baidu.com/s/1zJBcS6tjfXlwg1kP6VnLSg 提取码: f9ya)
具体方案 构建makefile模板 我基本是直接复制参考博文里的模板(修改标准库为17),内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 CC := g++ CCFLAG := -std=c++17 DBGFLAG := -g CCOBJFLAG := $(CCFLAG) -c BIN_PATH := bin OBJ_PATH := obj SRC_PATH := src DBG_PATH := debug TARGET_NAME := main ifeq ($(OS) ,Windows_NT) TARGET_NAME := $(addsuffix .exe,$(TARGET_NAME) ) endif TARGET := $(BIN_PATH) /$(TARGET_NAME) TARGET_DEBUG := $(DBG_PATH) /$(TARGET_NAME) MAIN_SRC := src/main.cpp SRC := $(foreach x, $(SRC_PATH) , $(wildcard $(addprefix $(x) /*,.c*) )) OBJ := $(addprefix $(OBJ_PATH) /, $(addsuffix .o, $(notdir $(basename $(SRC) ) ))) OBJ_DEBUG := $(addprefix $(DBG_PATH) /, $(addsuffix .o, $(notdir $(basename $(SRC) ) ))) DISTCLEAN_LIST := $(OBJ) \ $(OBJ_DEBUG) CLEAN_LIST := $(TARGET) \ $(TARGET_DEBUG) \ $(DISTCLEAN_LIST) default: all $(TARGET) : $(OBJ) $(CC) $(CCFLAG) -o $@ $^ $(OBJ_PATH) /%.o: $(SRC_PATH) /%.c* $(CC) $(CCOBJFLAG) -o $@ $< $(DBG_PATH) /%.o: $(SRC_PATH) /%.c* $(CC) $(CCOBJFLAG) $(DBGFLAG) -o $@ $< $(TARGET_DEBUG) : $(OBJ_DEBUG) $(CC) $(CCFLAG) $(DBGFLAG) $^ -o $@ .PHONY : allall: $(TARGET) .PHONY : debugdebug: $(TARGET_DEBUG) .PHONY : cleanclean: @echo CLEAN $(CLEAN_LIST) @rm -f $(CLEAN_LIST) .PHONY : distcleandistclean: @echo CLEAN $(CLEAN_LIST) @rm -f $(DISTCLEAN_LIST)
目录结构 src文件夹下放源文件以及头文件,后面还要需要修改.vscode
中的task.json
和launch.json
注意:如果使用本文中的makefle,包含主函数的源文件名必须为main.cpp
task.json 如果你使用的是msys的工具包,那command就写make 按快捷键Ctrl+Shift+B
可以执行仅生成命令(build) (在微软输入法中文模式时会出现表情窗口←_←)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 { "version" : "2.0.0" , "tasks" : [ { "label" : "build" , "command" : "mingw32-make" , "args" : [ "default" ], "type" : "shell" , "group" : { "kind" : "build" , "isDefault" : true }, }, { "label" : "build-debug" , "command" : "mingw32-make" , "args" : [ "debug" ], "type" : "shell" }, { "label" : "clean" , "command" : "mingw32-make" , "args" : [ "clean" ], "type" : "shell" } ] }
launch.json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 { "version" : "0.2.0" , "configurations" : [ { "name" : "(gdb) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${workspaceFolder}/debug/main.exe" , "args" : [], "stopAtEntry" : false , "cwd" : "${workspaceFolder}/debug/" , "environment" : [], "externalConsole" : true , "internalConsoleOptions" : "neverOpen" , "MIMode" : "gdb" , "miDebuggerPath" : "gdb.exe" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : false , } ], "preLaunchTask" : "build-debug" } ] }
配置完成 enjoy it! 😉
参考 VS Code 配置 C/C++ 环境