首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Windows 下 Makefile 遞歸調用子目錄 Makefile:nmake 與 mingw-make 差異

     編輯:程式設計疑難解答

問題

Linux 下 cd subdir; make 寫法在 Windows cmd.exe + make.exe 下失效。

原因

Windows 版 make 可能是:

  • GNU Make (mingw32-make):支援 cd 但路徑分隔符、Shell 命令有差異。
  • Microsoft NMAKE:語法完全不同,不支援 cd、; 等 Unix Shell 慣用法。

解決方案

方案一:GNU Make (mingw) —— 使用 $(MAKE) -C

# Makefile
subdir_target:
	$(MAKE) -C subdir  # -C 切換目錄,跨平台通用

# 或顯式調用
subdir_target:
	cd subdir && $(MAKE)

注意:命令行必須以 Tab 開頭,&& 在 mingw-make 中支援。

方案二:NMAKE (MSVC) —— 遞歸調用 NMAKE

# NMakefile
subdir_target:
	cd subdir
	$(MAKE) /f subdir.mak
	cd ..

# 或更簡潔
subdir_target:
	$(MAKE) /f subdir\subdir.mak

方案三:統一構建腳本(推薦現代項目)

  • CMake 生成器:cmake -G "NMake Makefiles" 或 "MinGW Makefiles",統一生成對應 Makefile。
  • Meson + Ninja:跨平台、高性能、語法簡潔。

關鍵差異對比

特性GNU MakeNMAKE
切換目錄-C dir 或 cd dir &&cd dir 另起行
變量引用$(VAR)$(VAR) (同)
條件判斷ifeq!IF
默認 Shellsh/cmdcmd.exe

總結

Windows 下 Makefile 遞歸調用需根據 make 實現選擇語法。統一用 CMake 生成 是現代 C/C++ 項目避開此類平台差異的最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved