終止我不能找到一種方法,使用共同的makefile以兩個GNU製作和MS NMAKE工作,主要是因爲它們對於「包含」和/或「if」指令具有不兼容的語法。 MS nmake需要使用!指令的前綴。例如,!if,!include等...
但是,如果它被允許有單獨的宏,它可能會被欺騙。在這裏,我提出我發現迄今通過觀察以下makefile文件製作兩個GNU製作和MS NMAKE兼容的最佳方式:
- MS NMAKE讀取默認的宏TOOLS.INI文件。
- MS套件使用.obj作爲目標文件擴展名。
- GNU make讀取MAKEFILES環境變量中定義的文件。
- GNU套件使用.o作爲目標文件擴展名。
- GNU make無需爲目標提供可執行擴展名.exe。
注意:以下已經使用MS Visual Studio 2015和MINGW32進行了測試。
第1步:創建一個下面的DOS批處理文件,並讓它在CMD提示符被調用時運行。
set MAKEFILES=TOOLS.gcc
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
第2步:創建如下您的工作目錄下的TOOLS.INI文件:(這個文件是獨立的,除了可能是庫的項目依賴的)
[NMAKE]
LDLIBS =
CDEBUG = /Zi
LDEBUG = /debug:full
WDFLAGS = /wd4996 /wd4774 /wd4018 /wd4710 /wd4820
CFLAGS = /nologo $(CDEBUG) /EHsc /Wall $(WDFLAGS)
LDFLAGS = /nologo $(LDEBUG)
RM = del /F /Q
LINK = "$(VCINSTALLDIR)bin\link" $(LDFLAGS)
CP = copy
CC = cl
CPP = $(CC) /P
X = .exe
O = .obj
.obj.exe:
$(LINK) $** $(LOADLIBES) $(LDLIBS) /Out:[email protected]
第3步:創建工具你的工作目錄下.gcc如下:(這個文件是獨立於你的項目依賴的除了庫可能)
LD_LIBS =
LDLIBS =
CDEBUG = -g
LDEBUG = -g
CFLAGS = $(CDEBUG)
LDFLAGS = $(LDEBUG)
RM = rm -f
LINK = gcc $(LDFLAGS)
CP = cp
CC = gcc
CPP = $(CC) -E
X =
O = .o
%: %.o
$(LINK) $^ $(LOADLIBES) $(LDLIBS) -o [email protected]
步驟4:編輯如下生成文件(注意$( X)和$(O)),其中只指定了依賴關係。
SHELL = /usr/bin/sh
app: app1$(X) app2$(X)
app1$(X): app1$(O)
app2$(X): app2$(O)
clean:
$(RM) *.exe *.o *.obj *.ilk *.pdb *.tmp *.i *~
第5步:享受GNU製作和MS具有相同的makefile
$ nmake
$ make clean
$ nmake clean
$ make
你可能會建立或得到GNU讓你的Windows系統上執行nmake。 –
對於跨平臺項目,我可以推薦cmake(http://www.cmake.org)。 –
我已閱讀cmake。但我需要在大學裏練習使用nmake。 – j0ker