You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Linux Makefile转换为Windows兼容版本?

Windows 10 下兼容的 Makefile 转换方案

问题说明

我对Makefile了解不多,现有一个可在Linux下运行的Makefile(不清楚具体发行版),使用Windows 10,需要一个功能完全一致的Windows版Makefile(文件夹路径及名称均相同)。曾尝试让ChatGPT转换但未成功,自己也无法完成转换。原Linux Makefile内容如下:

ASM=nasm
CC=gcc

SRC_DIR=src
TOOLS_DIR=tools
BUILD_DIR=build

.PHONY: all floppy_image kernel bootloader clean always tools_fat

all: floppy_image tools_fat

#
# Floppy image
#
floppy_image: $(BUILD_DIR)/main_floppy.img

$(BUILD_DIR)/main_floppy.img: bootloader kernel
    dd if=/dev/zero of=$(BUILD_DIR)/main_floppy.img bs=512 count=2880
    mkfs.fat -F 12 -n "NBOS" $(BUILD_DIR)/main_floppy.img
    dd if=$(BUILD_DIR)/bootloader.bin of=$(BUILD_DIR)/main_floppy.img conv=notrunc
    mcopy -i $(BUILD_DIR)/main_floppy.img $(BUILD_DIR)/kernel.bin "::kernel.bin"
    mcopy -i $(BUILD_DIR)/main_floppy.img test.txt "::test.txt"

#
# Bootloader
#
bootloader: $(BUILD_DIR)/bootloader.bin

$(BUILD_DIR)/bootloader.bin: always
    $(ASM) $(SRC_DIR)/bootloader/boot.asm -f bin -o $(BUILD_DIR)/bootloader.bin

#
# Kernel
#
kernel: $(BUILD_DIR)/kernel.bin

$(BUILD_DIR)/kernel.bin: always
    $(ASM) $(SRC_DIR)/kernel/main.asm -f bin -o $(BUILD_DIR)/kernel.bin

#
# Tools
#
tools_fat: $(BUILD_DIR)/tools/fat
$(BUILD_DIR)/tools/fat: always $(TOOLS_DIR)/fat/fat.c
    mkdir -p $(BUILD_DIR)/tools
    $(CC) -g -o $(BUILD_DIR)/tools/fat $(TOOLS_DIR)/fat/fat.c

#
# Always
#
always:
    mkdir -p $(BUILD_DIR)

#
# Clean
#
clean:
    rm -rf $(BUILD_DIR)/*

前置准备

在Windows 10上需要先搭建兼容环境:

  • 安装MSYS2或MinGW-w64,确保以下工具可在终端调用:
    • nasm:汇编器
    • gcc:C编译器
    • dd:文件复制工具
    • mkfs.fat:FAT文件系统格式化工具(需安装dosfstools包)
    • mcopy:FAT镜像文件操作工具(需安装mtools包)

转换后的Windows版Makefile

ASM=nasm
CC=gcc

SRC_DIR=src
TOOLS_DIR=tools
BUILD_DIR=build

.PHONY: all floppy_image kernel bootloader clean always tools_fat

all: floppy_image tools_fat

#
# Floppy image
#
floppy_image: $(BUILD_DIR)/main_floppy.img

$(BUILD_DIR)/main_floppy.img: bootloader kernel
    dd if=/dev/zero of=$(BUILD_DIR)/main_floppy.img bs=512 count=2880
    mkfs.fat -F 12 -n "NBOS" $(BUILD_DIR)/main_floppy.img
    dd if=$(BUILD_DIR)/bootloader.bin of=$(BUILD_DIR)/main_floppy.img conv=notrunc
    mcopy -i $(BUILD_DIR)/main_floppy.img $(BUILD_DIR)/kernel.bin "::kernel.bin"
    mcopy -i $(BUILD_DIR)/main_floppy.img test.txt "::test.txt"

#
# Bootloader
#
bootloader: $(BUILD_DIR)/bootloader.bin

$(BUILD_DIR)/bootloader.bin: always
    $(ASM) $(SRC_DIR)/bootloader/boot.asm -f bin -o $(BUILD_DIR)/bootloader.bin

#
# Kernel
#
kernel: $(BUILD_DIR)/kernel.bin

$(BUILD_DIR)/kernel.bin: always
    $(ASM) $(SRC_DIR)/kernel/main.asm -f bin -o $(BUILD_DIR)/kernel.bin

#
# Tools
#
tools_fat: $(BUILD_DIR)/tools/fat.exe
$(BUILD_DIR)/tools/fat.exe: always $(TOOLS_DIR)/fat/fat.c
    if not exist $(BUILD_DIR)/tools mkdir $(BUILD_DIR)/tools
    $(CC) -g -o $(BUILD_DIR)/tools/fat.exe $(TOOLS_DIR)/fat/fat.c

#
# Always
#
always:
    if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)

#
# Clean
#
clean:
    if exist $(BUILD_DIR) rd /s /q $(BUILD_DIR)
    mkdir $(BUILD_DIR)

关键修改说明

  1. 目录创建:将Linux的mkdir -p替换为Windows原生的if not exist <dir> mkdir <dir>,避免路径不存在时报错
  2. 工具编译输出:Windows下可执行文件需带.exe后缀,因此将$(BUILD_DIR)/tools/fat改为$(BUILD_DIR)/tools/fat.exe
  3. 清理命令:将Linux的rm -rf替换为Windows的rd /s /q,强制删除目录及所有内容,之后重建空的BUILD_DIR
  4. 核心命令兼容:dd、mkfs.fat、mcopy在MSYS2/MinGW环境下语法与Linux一致,无需修改

内容的提问来源于stack exchange,提问作者rumixist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:13:27