主要前提内容参照前文:

Linux环境下配置vscode的C/C++编译环境

===========================================================

代码结构:

main.cpp 代码:

#include <iostream>
#include "swap.h" int main() {
Swap myswap(10, 20);
myswap.printInfo();
myswap.run();
myswap.printInfo();
cout << "After swap" << endl;
return 0;
}

swap.cpp 代码:

#include "swap.h"

void Swap::run(){
int temp;
temp = _a;
_a = _b;
_b = temp;
}
void Swap::printInfo()
{
cout << "_a = " << _a << endl;
cout << "_b = " << _b << endl;
}

swap.h 代码:

#pragma once
#include<iostream>
using namespace std;
class Swap
{
public:
Swap(int a, int b){
this->_a = a;
this->_b = b;
}
void run();
void printInfo(); private:
int _a;
int _b;
};

======================================

配置文件:

.vscode/tasks.json

{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++-7 生成活动文件",
"command": "/usr/bin/g++-7",
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/main.cpp",
"${workspaceFolder}/src/swap.cpp",
"-o",
"${workspaceFolder}/mainX",
"-I",
"${workspaceFolder}/include"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$g++"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}, {
"type": "shell",
"label": "make",
"command": "make",
"options": {
"cwd": "${workspaceFolder}",
},
"detail": "make调试器生成的任务。"
} ],
"version": "2.0.0"
}

.vscode/launch.json

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++-7 - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/mainX",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "make",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

Makefile 文件内容:

# C compiler options
CC = g++ # C compiler flags
CFLAGS = -g -O2 -ggdb3
#CFLAGS = -g -O2 CLEAN = clean #
RELEASE = mainX
DEBUG = mainX.debug
LIBS =
INC = include # Make everything
#all: $(RELEASE) $(DEBUG)
all: $(RELEASE) $(CLEAN) # Make the application
$(RELEASE): main.o swap.o
$(CC) -o build/$(RELEASE) $(CFLAGS) src/main.o src/swap.o main.o: main.cpp
$(CC) -o src/main.o $(CFLAGS) -c main.cpp -I $(INC) swap.o: src/swap.cpp
$(CC) -o src/swap.o $(CFLAGS) -c src/swap.cpp -I $(INC) # Clean all object files...
clean:
rm src/*.o
# rm $(RELEASE)
# rm $(DEBUG)

给出更简洁的Makefile :

CC = gcc  -I include
CXX = g++ -I include CFLAGS = -g -O2 -ggdb3
#CFLAGS = -g -O2 CLEAN = clean
BUILD = build
SRC = $(shell find -name '*.cpp')
OBJECT = $(SRC:.cpp=.o) #
RELEASE = mainX
DEBUG = mainX.debug
LIBS =
INC = -I include # Make everything
all: $(RELEASE) $(CLEAN) # Make the application
$(RELEASE): $(OBJECT)
$(CXX) -o $@ $^ $(CFLAGS)
# @echo $(CXX)
# @echo $(SRC)
# @echo $(OBJECT)
@echo $@
@echo $<
@echo $^
@echo $(@D)
@echo $(<D)
@echo $(^D)
@echo $(@F)
@echo $(<F)
@echo $(^F) $(OBJECT): # Clean all object files...
.PHONY: clean
clean:
rm $(OBJECT)
# rm $(RELEASE)
# rm $(DEBUG)

================================================

主要关键点,配置tasks.json中的make任务:

核心部分:

        {
"type": "shell",
"label": "make",
"command": "make",
"options": {
"cwd": "${workspaceFolder}",
},
"detail": "make调试器生成的任务。"
}

其中最为关键的是 make 任务的 type要改为 shell  ,否则会报错。

==========================================

Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式)的更多相关文章

  1. WIN7环境下配置vscode c++环境

    目录 安装vscode 添加中文环境支持 添加c++支持 配置c++环境 安装MinGW 配置MinGW环境变量 配置vscode launch文件配置 task文件配置 可能出现的问题 安装vsco ...

  2. MinGW安装与环境变量配置和Sublime Text 2搭建C++编译环境

    MinGW安装与环境变量配置 从http://sourceforge.net/projects/mingw/下载MinGW,安装到D:\MinGW.工具集选择安装(之后还可以进行安装卸载):至少需要安 ...

  3. Win10环境下配置VScode的C++编译环境

    写前感想:前前后后,折腾好几次,最后还是在学长安利下,开始入坑vscode了.原因一个是小巧,还有就是vs新建工程码题的方式太消耗内存了,基本每个项目就是以MB为单位计算的,然后希望用这篇文章记录自己 ...

  4. Window环境下配置MySQL 5.6的主从复制

    原文:Window环境下配置MySQL 5.6的主从复制 1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 2. ...

  5. 在Linux虚拟机下配置jdk的环境变量

    1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  6. 阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇

    上一篇讲了PHP服务器的基本配置,我们安装了apache,php,还有MySQL,最后还跑通了一个非常简单的php页面,有兴趣的朋友可以看我的这篇博客: 阿里云ECS服务器Linux环境下配置php服 ...

  7. Linux环境下使用VSCode编译makefile文件的注意事项

    Linux环境下使用VSCode编译makefile文件的注意事项 首先安装C/C++的两个依赖 在debug,launch会自动的生成下方的launch.json launch.json { // ...

  8. 【经验之谈】Windows环境下配置WordPress

    前言 wordpress全球著名的开放博客平台,拥有成千上万个各式插件和不计其数的主题模板样式,使用php和mysql搭建,下面说下载windows环境下配置wordpress,经验之谈. 安装 关于 ...

  9. Win8.1系统下配置搭建IIS8.5+PHP5.5.4运行环境

    原文 Win8.1系统下配置搭建IIS8.5+PHP5.5.4运行环境 很多人喜欢用linux搭建php网页语言运行环境,但由于linux高度自定义化,经常需要root运行命令,略显高端,相对应的微软 ...

  10. Ubuntu环境下配置GCC

    Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...

随机推荐

  1. 漫画图解 Go 并发编程之:Channel

    当谈到并发时,许多编程语言都采用共享内存/状态模型.然而,Go 通过实现 Communicating Sequential Processes(CSP)而与众不同.在 CSP 中,程序由不共享状态的并 ...

  2. MySQL数据库开发(2)

    单表查询 单表查询即对单个表进行查询. 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY fie ...

  3. Python 调整PDF页面尺寸大小

    在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等.这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求. 利用Pytho ...

  4. jsp和servlet的区别、共同点、各自应用的范围?

    JSP是Servlet技术的扩展,本质上就是Servlet的简易方式.JSP编译后是"类servlet".Servlet和JSP最主要的不同点在于: Servlet的应用逻辑是在J ...

  5. HttpServletRequest获取header参数 sign

    HttpServletRequest获取header参数 sign //从请求头中获取参数 private static Map<String, String> getHeaders(Ht ...

  6. vue - ElementUI

    关于ElementUI最好还是通过实践项目来做,来熟悉. 这只是一些ElementUI的注意事项,至此vue2的内容真的全部完结,后面将继续vue3的内容更新. 一.完整引入 一般提及什么什么UI会有 ...

  7. 自己写一个 NODE/ATTR 的结构

    ## python 3.8 以上 from typing import Dict, List, TypeVar, Tuple, Generic, get_args import json T = Ty ...

  8. SpringBoot 启动时报错Unable to start embedded Tomcat

    导读 最近公司有个gradle构建的工程,需要改造成maven方式构建(点我直达).转为maven后,启动时一直报tomcat错误,最终排查是因为servlet-api这个包导致的依赖冲突,将这个依赖 ...

  9. JS 延迟加载

    function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; wh ...

  10. Oracle 触发器 before insert update

    场景,往A表插入数据时,A表和B表是同一类型的状态下,A表中累计的值,不能超过B表中的值(注:往数据库插入时,不能批量执行事务!),利用触发器before insert update,监控状态,若超过 ...