│  abc.cpp
│  main.cpp
│  test.ps1
│
└─.vscodec_cpp_properties.jsonsettings.json

我这人有个毛病:一定要用 VS Code 写代码,确切地说,一定要用我自己的 VS code ,自己配好的键盘映射、自己的插件。

近来从实习岗位回学校,想要在自己的 win 10 上跑通实验代码,何谈容易。最主要的问题在于:我需要用到外部依赖 gecode ,对于 win 10 ,经验告诉我,从源码编译来安装并不是一个好的选择,从官网下载 .msi 安装包再配合 VC++ 是明智之举。我没什么意见,但是…我不想用 VS(VC++的编辑器),只想用 VS Code 。这就需要额外学习一点东西了:

  • VC++ 内的微软编译器 MSVC cl.exe 使用?
  • 自动完成「编译->链接->运行C++文件」流程?

首先我们可以得到 cl.exe 编译链接的方法,由 gecode说明书MPG :

cl /DNDEBUG /EHsc /MD /wd4355 -I "D:\Program Files\gecode\include" \-c ./$filename.obj -Tp ./$filename.cpp
cl /DNDEBUG /EHsc /MD /wd4355 -I "D:\Program Files\gecode\include" \-Fe ./$filename.obj /link /LIBPATH:"D:\Program Files\gecode\lib"

如上,先编译为 .obj ,再链接,链接时别忘了告诉编译器 *.lib 都放在哪里。

我们不可能每次运行程序时,都向命令行输入这么长一串命令,于是我想到:

  • 把这个过程写在 makefile 里?(win 10 上 make 命令报错,遂放弃)
  • 把 gecode 的 includePath 和 libPath 放到 环境变量 includelib 里?(污染系统环境,且我们不可能每应用一个外部依赖,就修改一次系统环境,遂放弃)
  • 用 shell 来集成这些命令

于是就有了 test.ps1

$filename = main
if ($args.Count -eq 1)
{$filename = $args[0]
}
else
{Write-Output "There must be one filename as arg!"exit
}if (Test-Path ./$filename.obj)
{Remove-Item ./$filename.obj
}if (Test-Path ./$filename.exe)
{Remove-Item ./$filename.exe
}try
{Write-Output "compile..."cl /DNDEBUG /EHsc /MD /wd4355 -I "D:\Program Files\gecode\include" `-c ./$filename.obj -Tp ./$filename.cppWrite-Output "link..."cl /DNDEBUG /EHsc /MD /wd4355 -I "D:\Program Files\gecode\include" `-Fe ./$filename.obj /link /LIBPATH:"D:\Program Files\gecode\lib"Write-Output "run..."sudo ./$filename.exe
}
catch
{# 目前 try 捕获不到编译器的异常# issue: need helpWrite-Warning "Error: $_"exit
}

第一次写 ps 脚本,还望大佬多多指教。有几点需要注意:

  • ` 是用来换行的
  • 执行编译出的可执行文件需要用 sudo ,这很迷,我做了一点笔记。

如何使用?

当我有一个脚本 abc.cpp ,我只需要在命令行输入

test abc

就可以自动 编译->链接->运行C++文件abc.cpp了!

编译前:

│  abc.cpp
│  test.ps1

编译后:

│  abc.cpp
│  abc.exe
│  abc.obj
│  test.ps1

用 powershell 脚本 .ps1 写一个自动化的「编译->链接->运行C++文件」脚本相关推荐

  1. 服务器部署项目脚本,写一个自动化部署脚本

    .sh脚本一键部署 打游戏用过一键无敌 正好这几天熟悉新项目 我就把之前的./push.sh迁移了过来 顺便 写了个自动化构建并提交到服务器的.sh脚本 一.背景 先是一个git的提交脚本 因为每次提 ...

  2. C语言_写一个关机程序,只要程序运行起来,电脑在1分钟内关机。

    写一个关机程序,只要程序运行起来,电脑在1分钟内关机, //如果输入:"我是猪,才取消关机\n") 代码如下(示例): #include <string.h> #inc ...

  3. java脚本_写一个在线Java脚本执行器

    在生产环境中,有时候我们想要快速执行一段代码,但是又不得不经历上线的痛苦(分情况哈,有时候这种痛苦是必须的)或者在某些场景中,不能重启避免破坏现场,那么有个在线脚本执行器就最好不过了.于是在工作之余, ...

  4. 简单的python脚本-如何写一个简短(200行)的Python脚本

    简介 在这篇文章中我将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的脸替换为另一幅图片的脸. 这个过程分四步: 检测脸部标记. 旋转.缩放.平移和第二张图片,以配合第一步. ...

  5. python可以写脚本_Python写一个痒痒鼠脚本

    之前电脑系统崩了,重装之后就直接安装Anaconda来使用Python语言(装的时候记得把添加路径勾上,不想装Anaconda可参考之前的Python环境搭建),咱们还是先用Sublime来写脚本吧. ...

  6. 【用python写一个Magicka1(初代魔能)游戏的小脚本】

    Magicka小脚本 magicka是一个十分好玩的小游戏,奈何需要手动搓魔法,本人经常记错咒语导致紧要关头常常被boss直接击杀(惨),不过这些现在都不重要了,因为我写了一个小脚本,可以直接一键放技 ...

  7. 从零开始仿写一个BiliBili客户端之编译ijkplayer

    章节 从零开始仿写一个B站客户端之-编译ijkplayer 从零开始仿写一个B站客户端之-抓包B站接口 从零开始仿写一个B站客户端之-使用ijkplayer打造一个通用的播放器 从零开始仿写一个B站客 ...

  8. 今天终于将第一个 Android NDK 程序编译、运行成功

    今天终于将第一个 NDK 程序编译.运行成功. 起先看资料和书籍时,都要求安装 CygWin.我也安装了,并将 Sample: hello-jni 编译成功.编译的 LOG 如下:  LeoZheng ...

  9. 用pycharm写python_如何利用pyCharm编写和运行python文件

    在安装python环境后,通常可以利用IDE pyCharm来编译我们的python文件.创建一个python文件夹,用pyCharm打开文件夹,在文件夹中新建一个python文件demo.py 也许 ...

最新文章

  1. [Webpack 2] Ensure all source files are included in test coverage reports with Webpack
  2. python filter map区别_python中filter、map、reduce的区别
  3. 多主机推送公钥、修改配置、修改密码脚本
  4. Win11系统添加新用户的方法
  5. 和平精英android怎么写符号,和平精英名字符号大全 可用的名字特殊符号有哪些...
  6. Spring Spring MVC Hibernate 整合备忘
  7. yolo v3制作自己的数据_【手把手AI项目】五、自己制作图像VOC数据集--Objection Detection(目标检测)...
  8. Linux V4L2驱动框架分析之(一):架构介绍
  9. csdn怎样注册?不想用微信
  10. docker-compose中解决depends_on无效问题
  11. java爬虫爬取b站视频分享iframe代码并保存10000条数据到数据库
  12. MES系统在注塑行业中的应用
  13. 一个简单的教学管理系统(SQL实现)
  14. CDH Parcel包starrocks集成cloudera Manager
  15. 浅谈solrCloud的分布式设计
  16. 大一网页设计期末大作业,HTML+CSS静态网站
  17. 如何把图片转换成PDF?4种简单快捷的方法,一键将图片转PDF
  18. 通用视觉技术体系“书生”(INTERN)由七大模块组成
  19. 解决方案资源管理器中显示bin,Debug等文件夹
  20. JAVA狗叫源代码_从头认识java-1.1 编程语言抽象过程以及java的基础特性

热门文章

  1. DOC命令大全【详细版】
  2. 图片链接在FireFox下好用,但是在IE下不好用!
  3. ubuntu服务器上提示 To run a command as administrator (user “root“), use “sudo <command>“. See “ 解决方案
  4. 用信号量实现进程互斥示例和解决哲学家就餐问题
  5. 解决 ModuleNotFoundError: No module named ‘requests‘ 问题
  6. 爬坑系列----Redis查询key报空指针异常,而redis中确实存在该key
  7. 解决npm install安装慢的问题
  8. Gradle - 编译报org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm的问题解决
  9. python2.7下使用logging模块记录日志到终端显示乱码问题解决
  10. 查找在Git中删除文件的时间