生命之风的低语
Whispers in the Wind of Life.

Windows下一键编译运行汇编的make文件

2026-03-01 16:47:55

本文利用MASM32 SDK中的编译器和链接器编译汇编语言,适用于单文件的情况。

准备环境

本文介绍的方法仅在以下环境测试过:

Windows 11 22H2,MASM32 SDK version 11,GNU Make 3.81

配置步骤

将Make与MASM32的二进制文件目录都添加到系统环境变量Path中。例如可能添加的是D:\GnuWin32\bin;D:\masm32\bin;。

在汇编源文件所在目录创建makefile文件,源码见下文。

make,程序会自动编译运行。

如果需要重新编译,先make clean,再重新make即可。

makefile文件源码

以下makefile文件假定MASM32的目录为D:\masm32,要编译的文件名为test.asm,并引用了位于D:\irvine的库文件[1],可以根据需要自行修改其中的变量。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# 定义编译器和链接器

CC = ml

LD = link

# 定义编译器和链接器选项

CFLAGS = /c /coff /ID:/masm32/include /ID:/Irvine

LDFLAGS = /subsystem:CONSOLE /out:test.exe /LIBPATH:D:/masm32/lib /LIBPATH:D:/Irvine

# 定义源文件、目标文件和可执行文件

SRC = test.asm

OBJ = test.obj

EXE = test.exe

# 定义默认目标,即要生成的可执行文件

all: $(EXE)

# 定义从源文件生成目标文件的规则

$(OBJ): $(SRC)

$(CC) $(CFLAGS) $<

# 定义从目标文件生成可执行文件并执行的规则

$(EXE): $(OBJ)

$(LD) $(LDFLAGS) $<

./$@

# 定义清理目标,删除生成的中间文件和可执行文件

clean:

del $(OBJ) $(EXE)

需要特别注意的是makefile文件仅允许使用Tab来缩进,空格缩进会报错。

运行效果

以一个在终端打印Hello, World!的简单80386汇编程序为例。通过make直接编译运行的效果如下:

其他

可以安装VS Code的Makefile Tools扩展,以便直接在VS Code内打开侧边栏生成和运行汇编。

如果需要带命令行参数,可以加到第二十四行后面,或自行在终端中运行。

注释

↑基普·R.欧文所著《汇编语言:基于x86处理器》一书中所用的库。如不引用这些库,删掉第六行中的 /ID:/irvine与第七行中的 /LIBPATH:D:/Irvine。