使用 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.cpp
或compile 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.cpp
或 def.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++的主要内容,如果未能解决你的问题,请参考以下文章