使用 nmake 或其他工具(如批处理脚本)从命令行编译 c++

Posted

技术标签:

【中文标题】使用 nmake 或其他工具(如批处理脚本)从命令行编译 c++【英文标题】:Compiling c++ from command line using nmake or another tool like batch script 【发布时间】:2020-05-18 14:52:28 【问题描述】:

我在一个目录中有多个 c++ 文件,但现在我只需要编译其中一个。我正在使用带有 mingw-w64 的 Windows 10。

目前我正在单独编写诸如g++ abc.cpp -o abc 之类的命令以及一些标志,但我需要自动执行此操作,例如,仅编写诸如compile abc.cpp 之类的一些命令。

我正在浏览nmake,但似乎没有任何简单的教程,我在这方面卡了一段时间。

是否有任何简单的工具可以完成这项工作,或者如何在nmake中完成。我正在使用 VSCode

编辑

在 KamilCuk 的评论中,我了解了也可以使用的批处理脚本

【问题讨论】:

s there any easy tool for this job 寻求外部工具对于 *** 来说是题外话。我会(强烈)推荐cmake @KamilCuk 使用cmake后,编译过程是什么,我可以使用compile one.cppcompile two.cpp这样的命令,这两个在同一个文件夹中 @KamilCuk 所以我必须一遍又一遍地写这行:cmake --build <the source dir> --target one.o 这取决于您的配置,任何自定义设置都需要您做一些工作。但是您仍然可以使用大多数构建系统配置 cmake,然后 cmake --build <the build dir> --target <proper path to one.obj file>I have to write this line again and again 你是什么意思?通常你编译一个程序或一个库,而不是单个源文件(好吧,除非你自己编写它或者没有一个可以自动执行它的构建系统)。 实际上我的目标是减少我用来编译的行:g++ one.cpp -o one 到更小的行,可能是compile one.cpp。但我需要它来处理其他文件,比如compile two.cpp 【参考方案1】:

最好、最简单的方法是使用 Makefile。我相信mingw有make能力。

您所要做的只是创建一个名为“Makefile”且没有扩展名的文件。

在 Makefile 中添加以下行

CXX = g++
CXXFLAGS = PUT YOUR FLAGS HERE
abc: abc.cpp
     $(CXX) $(CXXFLAGS) -o abc

然后当你想编译 abc 时,只需在命令行中运行 make abc 即可。

编辑:支持自定义文件

CXX = g++
CXXFLAGS = PUT YOUR FLAGS HERE
main: $(FILE).cpp
     $(CXX) $(CXXFLAGS) -o $(FILE)

这个新的 makefile 从命令行读取文件名。 您可以简单地运行:make FILE=abc,它将构建 abc.cpp 并将其发送到 -o abc

【讨论】:

感谢您的回答,但我正在寻找的是我有各种不同的文件,例如 abc.cppdef.cpp。使用它,我将需要一次又一次地更改生成文件 @jeea 我更新了它以接受来自命令行的参数。 谢谢伙计,你能告诉我是否可以在不写FILE=..的情况下传递参数我的意思是直接make abc.cpp,其中abc.cpp会自动传递给makefile中的变量? 我不这么认为,但你可以做的是编写一个 shell/bash 脚本。像 build.sh 一样创建并给它一些脚本,如:make FILE=$1,你可能不得不搞砸这个,但如果你有脚本文件,运行它只会是./build.sh abc,然后你可以设置一个别名,所以输入compile 运行 ./build.sh,然后你终于可以运行你想要的输出:compile abc。如果您需要更多说明,请随时与我联系。 谢谢!!我现在还需要运行它,比如compileAndRun abc.cpp,我需要在makefile中添加什么命令??

以上是关于使用 nmake 或其他工具(如批处理脚本)从命令行编译 c++的主要内容,如果未能解决你的问题,请参考以下文章

如何在命令行上使用 NMAKE?

NMake 可选依赖项

nmake:是不是可以禁用编译警告?

从命令提示符获取 Windows nmake 版本?

查看 nmake 发出了啥命令

如何在命令提示符下设置 v140_xp 工具集以使用 NMake 构建?