首页 > 编程语言 >vscode 开发c++

vscode 开发c++

时间:2023-01-31 19:56:59浏览次数:40  
标签:shell TARGET vscode make c++ 开发 build true OUT

 

makefile.mk

#makefile.mk 公共头文件
ifndef TARGET
#  /root/make/src/test_include
# notdir
TARGET:=$(notdir $(shell pwd)) #test_include
endif
CXXFLAGS:=$(CXXFLAGS) -g  -std=c++11  -Iinclude#g++ -c 编译 自动推导
LDFLAGS:=$(LDFLAGS) #链接 可用于自动推导
LDLIBS:=$(LDLIBS) -lpthread #链接库 用于自动推导
#输出路径 /usr/bin  /usr/lib /usr/include
OUT:=/usr

SRCS:=$(wildcard *.cpp *.cc *.c) #test_include.cpp testcpp.cc testc.c
OBJS:=$(patsubst %.cpp,%.o,$(SRCS)) #test_include.o testcpp.cc testc.c
OBJS:=$(patsubst %.cc,%.o,$(OBJS))
OBJS:=$(patsubst %.c,%.o,$(OBJS)) #test_include.o testcpp.o testc.o

#区分动态库 静态库 和执行程序
ifeq ($(LIBTYPE),.so) #动态库 $(strip $(TARGET)) 去掉前后空格\t 
    TARGET:=lib$(strip $(TARGET)).so  
    LDLIBS:=$(LDLIBS) -shared
    CXXFLAGS:=$(CXXFLAGS) -fPIC
endif
ifeq ($(LIBTYPE),.a) #静态库 
    TARGET:=lib$(strip $(TARGET)).a  
endif

#启动脚本
STARTSH=start_$(TARGET)
#停止脚本
STOPSH=stop_$(TARGET)

# $(1) TARGET ,$(2)  OUT
define Install 
    @echo "begin install "$(1)
    -mkdir -p $(2)
    cp $(1) $(2)
    @echo "end install "$(1)
endef

#生成启动停止脚本,并安装到$(OUT)
# $(1) TARGET ,$(2)  OUT,$(3) $PARAS
define InstallSH
    @echo "begin make start shell"
    echo "nohup $(1) $(3)  &" > $(STARTSH)
    chmod +x $(STARTSH)
    cp $(STARTSH) $(2)
    @echo "end make start shell"

    @echo "begin make stop shell"
    echo killall $(1) >$(STOPSH)
    cp $(STOPSH) $(2)
    @echo "end make stop shell"
endef
all:depend $(TARGET)
depend:
    @$(CXX) $(CXXFLAGS) -MM $(SRCS) >.depend
-include .depend

#目标生成
$(TARGET):$(OBJS)
ifeq ($(LIBTYPE),.a) #静态库 
    $(AR) -cvr $@ $^
else
    $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@  $(LDLIBS)
endif


#安装程序和库
install:$(TARGET)
ifdef LIBTYPE
    $(call Install,$(TARGET),$(OUT)/lib)
    $(call Install,*.h,$(OUT)/include)
else
    $(call Install,$(TARGET),$(OUT)/bin)
    $(call InstallSH,$(TARGET),$(OUT)/bin)
endif

#卸载程序和库
uninstall:clean
ifndef LIBTYPE
    -$(STOPSH)
    $(RM) $(OUT)/bin/$(TARGET)
    $(RM) $(OUT)/bin/$(STARTSH)
    $(RM) $(OUT)/bin/$(STOPSH)
else
    $(RM) $(OUT)/lib/$(TARGET)
endif
    

#rm -r test.o test
#目标清理
clean:
    $(RM) $(OBJS)  $(TARGET) .depend

.PHONY: clean  uninstall install  all depend #伪目标 没有对应的文件

 

 

makefile

#sCXXFLAGS:=-Iinclude 
# LDFLAGS:=-L../xthread  -L../xcom
# LDLIBS:=-lxthread -lxcom
include  makefile.mk #统一的makefile头

 

tasks.json

{
    "tasks": [
        {
            "label": "build_debug", // 任务名称,调试时可以指定不用任务进行处理
            "type": "shell", // [shell, process], 定义任务作为作为进程运行还是在shell中作为命令运行; (测试没看出啥区别...)
            "command": "make all", // 要执行的命令,可以是外部程序或者是shell命令。这里使用make编译命令
            "problemMatcher": [ // 要使用的问题匹配程序。可以是一个字符串或一个问题匹配程序定义,也可以是一个字符串数组和多个问题匹配程序。
                "$gcc"
            ],
            "group": { // 定义此任务属于的执行组。它支持 "build" 以将其添加到生成组,也支持 "test" 以将其添加到测试组。
                "kind": "build",
                "isDefault": true
            },
            "presentation": { // 配置用于显示任务输出并读取其输入的面板
                "echo": true, // 控制是否将执行的命令显示到面板中。默认值为“true”。
                "reveal": "always", // 控制运行任务的终端是否显示。可按选项 "revealProblems" 进行替代。默认设置为“始终”。
                "focus": false, // 控制面板是否获取焦点。默认值为“false”。如果设置为“true”,面板也会显示。
                "panel": "shared", // 控制是否在任务间共享面板。同一个任务使用相同面板还是每次运行时新创建一个面板。
                "showReuseMessage": true, // 控制是否显示“终端将被任务重用,按任意键关闭”提示
                "clear": false // 运行前清屏
            }
        },
        {
            "label": "build_release",
            "type": "shell",
            "command": "make all",
            "args": ["CFLAGS = -O2"], // 编译参数, 替换makefile中让CFLAGS字段
            "dependsOn":["build_clean"], // 指定依赖让task, 即会先执行build_clean,然后再执行build_release
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "build_clean",
            "type": "shell",
            "command": "make",
            "args": ["clean"], // 相当于执行 make clean命令
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

 

 

launch.json

 

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
       
        {
            "name": "(gdb) Lauch", // 启动配置的下拉菜单中显示的名称
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/Demo1", // 将要进行调试的程序的路径, workspaceFolder指当前工作目录(即vscode打开的目录:hello),main指的是makefile编译后目标码(可执行程序)的名字
            "args": [], // 程序启动的参数
            "stopAtEntry": false, // 设置true时,程序将暂停在程序入口处, 即main()的第一个{位置
            "cwd": "${workspaceFolder}", // 调试时的工作目录
            "environment": [],
            "externalConsole": false, // 调试时,是否显示控制台串口
            "MIMode": "gdb", // 调试命令
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build_debug", // 使用哪个任务进行编译,需要指定tasks.json中的一个,这里选择用build_debug任务进行编译
            "miDebuggerPath": "/usr/bin/gdb" // 调试命令的路径
        }
    ]
}

 

标签:shell,TARGET,vscode,make,c++,开发,build,true,OUT
From: https://www.cnblogs.com/shiding/p/17080307.html

相关文章

  • 【c++】多项式曲线拟合
    源代码,截取至数值分析期末大作业。其中一步为多项式曲线拟合,求解出符合拟合精度的函数表达式。拟合和插值的区别?1.拟合:不必经过所有点2.插值:必须经过所有点(1)曲......
  • SpringBoot 开发抖音开放平台获取用户的粉丝统计和短视频数据
    大家好,我是小悟​抖音开放平台刚面世不久,资料比较少。即使对于一个开发人员来说,接入第三方接口都大同小异,不会太难,但我还是想把这些记录下来,特别是遇到的坑,会列在下面,一起参......
  • 基于 MT8788 平台 - AI 智能头盔定制开发
    随着时代的发展和科技的进步,现场作业管控正在由传统迈向数字化,将更多人工智慧,传感技术、虚拟功能等高科技技术植入到建筑、机械、人员穿戴设施、等各类物体中,并且被普遍互联......
  • 测试如何给开发提质量目标 ?
    读者提问:阿常你好,请问测试如何给开发提每年或每个季度的产品/项目质量目标,由测试提出,作为开发部门的目标,从而控制开发的质量 ?阿常回答:你们之前应该没有做过这类工作,所以你......
  • C++信奥赛题目 1154:亲和数
    1154:亲和数时间限制:1000ms      内存限制:65536KB提交数:41239   通过数:24946【题目描述】自然数a的因子是指能整除a的所有自然数,但不含a本......
  • 推荐几款实用的移动开发平台
    开年找解决方案的时候接触了一批移动开发平台,猛然发现近几年移动开发平台如雨后春笋般出现,于是乎就想针对市场上越来越多的移动开发平台做一次盘点对比,看看他们的基本情况......
  • 优秀前端都应该具备的开发好习惯,坚持了效率翻倍
    格拉德威尔曾提出过一个“一万小时定律”,即任何人从平凡到大师的必要条件,就是历经1万小时的锤炼,而这“1万小时”也不是达到就行;如何构成,才是能否成为行业资深的关键。总结......
  • 【KAWAKO】在windows上用CMake和MinGW编译c++工程
    目录安装CMake安装MinGW编写CMakeLists.txt编译一条龙安装CMake在网上随便找个教程照着安装就行了,不再赘述。安装MinGW参考这篇博客。从MinGW官网下载的安装包在安装的......
  • C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面
    在医学影像领域中,将三维重建中的人体组织展开平铺至二维,用来研判病灶和制定治疗方案的重要手段之一,它能够将立体曲面所包含的信息更为直观的展示到二维平面上,常用的情景包......
  • 【KAWAKO】TVM-使用c++进行推理
    目录前言修改cpp_deploy.cc文件修改DeployGraphExecutor()函数numpy与bin文件的互相转换numpy转binbin转numpy使用CMakeLists.txt进行编译运行前言在tvm工程的apps目录下......