no soy capaz de encontrar una manera de utilizar un makefile común de trabajar tanto para GNU make y MS nmake, principalmente porque tienen una sintaxis incompatible para las directivas "incluir" y/o "si". MS nmake requiere usar! prefijo para directivas. por ejemplo,! if,! include, etc ...
Si se permite tener macros separadas, sin embargo, podría ser engañado. Aquí I presenta la mejor manera que he encontrado hasta ahora para la fabricación de archivo MAKE compatible tanto con GNU make y MS nmake mediante la observación de los siguientes:
- MS nmake lee el archivo TOOLS.ini de macros por defecto.
- MS suite utiliza .obj como extensión de archivo de objeto.
- GNU make lee archivos definidos en una variable de entorno MAKEFILES.
- GNU suite utiliza .o como extensión de archivo de objeto.
- GNU no necesita dar una extensión ejecutable .exe para un destino.
Nota: Se ha probado lo siguiente con MS Visual Studio 2015 y MINGW32.
Paso 1: cree un siguiente archivo de proceso por lotes de DOS y permita que se ejecute cada vez que se invoca el aviso de CMD.
set MAKEFILES=TOOLS.gcc
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
Paso 2: Crear un archivo TOOLS.ini bajo el directorio de trabajo de la siguiente manera: (este archivo es independiente de sus dependencias del proyecto, excepto las bibliotecas posiblemente)
[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]
Paso 3: Crear una herramientas .gcc bajo el directorio de trabajo de la siguiente manera: (este archivo es independiente de sus dependencias del proyecto, excepto las bibliotecas posiblemente)
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]
Paso 4: Editar el Makefile de la siguiente manera (nota $ (X) y $ (O)) donde solo se especifican las dependencias.
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 *~
Paso 5: Disfrute de GNU make y MS nmake con el mismo archivo MAKE
$ nmake
$ make clean
$ nmake clean
$ make
Es posible construir o conseguir GNU make en el sistema Windows. –
Para proyectos multiplataforma, puedo recomendar cmake (http://www.cmake.org). –
Ya leí sobre cmake. Pero lo necesito para un ejercicio en la universidad donde se supone que debemos usar nmake. – j0ker