如何为汇编语言的程序制作Makefile?

时间:2013-09-06 08:04:18

标签: linux assembly makefile x86 nasm

我遇到过这个任务,用汇编语言为程序构建一个Makefile(没什么特别的,就像一个hello world)。该程序是Linux 32位,我正在使用NASM汇编程序。到目前为止,我只能为C程序找到Makefiles,我知道彼此之间没有太大区别,但我不熟悉这个东西。我有这个:

Program: main.o
    gcc -o Program main.o
main.o: main.asm
    nasm -f elf -g -F stabs main.asm

我无法判断这是否正确,或者如果确实如此,它是如何工作的。我无法尝试代码,因为这台计算机没有Linux。我真的很想知道代码中发生了什么。

1 个答案:

答案 0 :(得分:11)

首先,请阅读an introduction to Makefile

您的Makefile由make程序在调用时读取。它执行给定规则(例如make clean)或执行默认规则(通常为all)。

每个规则都有一个名称,可选的依赖项和要执行的shell代码。

如果您使用对象文件,您通常会启动Makefile:

all: main.o
    gcc -o PROGRAM_NAME main.o

此处的依赖项为main.o,因此必须在执行代码之前解析它。首先搜索名为main.o的文件并使用它。如果它不存在,则搜索允许制作文件的规则。

您有以下内容:

main.o: main.asm
    nasm -f elf -g -F stabs main.asm

此处制作main.o的规则取决于main.asm,这是您的源文件,所以我认为它已经存在。然后执行规则下的代码,并且必须使文件与规则名称匹配。 如果您的nasm调用正确,则会创建该文件,并执行all(或您命名的Program)的代码。

所以你的Makefile 应该工作,你只需要测试它就可以了:)它几乎与调用相同:

nasm -f elf -g -F stabs main.asm && gcc -o Program main.o

作为旁注,只要安装了所有工具,您仍然可以在Windows上进行测试。 cygwin项目提供了一个可以安装makegccnasm的环境。