Cygwin – Makefile-error:目标`main.o’的配方失败

我目前无法编写好的makefile而且不知道为什么.. -.-

这是我的主要内容:

#include  #include  int main(int argc, char *argv[]) { printf("MEEEEEP"); return (0); } 

这是我的makefile:

 # make SYSTEM= OS= ENVIRONMENT= # Binaries to use ifeq ($(ENVIRONMENT),MINGW) CXX = i686-pc-mingw32-g++ else CXX = g++ endif REMOVE = rm -vf RC = windres EXE = .exe ############################################################# # Info ifeq ($(CXX),g++) INFO_CXX = g++ -dumpversion; g++ -dumpmachine endif ############################################################# # Flags DEBUG = -DDEBUG -g OPTIMIZATION = -O2 #-Winline -finline-functions CFLAGS = -Wall -Wextra -W -static $(DEBUG) $(OPTIMIZATION) -D$(SYSTEM) -D$(OS) -D$(ENVIRONMENT) $(PRGFLAGS) ifeq ($(SYSTEM),I686) CFLAGS += -m32 ifeq ($(OS),WIN32) CFLAGS += -D_WIN32 endif ifeq ($(ENVIRONMENT),MINGW) CFLAGS += -fexceptions endif endif LFLAGS = ############################################################# # Files CFILES = main.c OBJS = ${CFILES:.c=.o} ############################################################# # Include INCLUDES = -I. ############################################################# # Library LIBRARIES = ############################################################# # Targets .PHONY: all all: @echo == Standard build: make SYSTEM=I686 OS=WIN32 ENVIRONMENT=MINGW @echo @echo make SYSTEM=I686 OS=WIN32 ENVIRONMENT=MINGW gyro ############################################################# # Implicit rules and filename extensions... .SUFFIXES: .h .o .c .co: %.h @echo Compiling $< for $(SYSTEM) $(OS) $(ENVIRONMENT) ... @echo MEEP $(CXX) $(CFLAGS) $(INCLUDES) -c $< -o $@ @echo MEEP2 ############################################################# # Target rules gyro: $(OBJS) @echo Building software for $(SYSTEM) ... @echo $(CXX) $(CFLAGS) $(LFLAGS) -o $@$(EXE) $(OBJS) $(LIBRARIES) ############################################################# # Clean .PHONY: clean clean: $(REMOVE) $(OBJS) ############################################################# # Info .PHONY: info info: @echo @echo Information about C++ Compiler/Linker: @echo $(INFO_CXX) 

当我输入制作陀螺仪时,我会收到输出:

 Compiling main.c for Windows_NT ... MEEP g++ -Wall -Wextra -W -static -DDEBUG -g -O2 -D -DWindows_NT -D -I. -c main.c -o main.o makeNew.mak:83: recipe for target `main.o' failed make: *** [main.o] Error 1 

但83号线落后于.co:%。h。 我不明白为什么。 有没有人有我的解决方案?

你在g++命令行中看到两个空-D条目? 他们造成了这个问题。 您必须-D项目中包含值,例如-DWIN32

如果你坚持使用-D $(SYSTEM)-D $(ENVIRONMENT)这样的东西,你可以使用类似的东西:

 SYSTEM ?= generic ENVIRONMENT ?= generic 

在makefile中给出了默认值。

您的输出看起来缺少所有重要输出:

 :0:1: error: macro names must be identifiers :0:1: error: macro names must be identifiers 

只是为了澄清,实际发送到g++-D -DWindows_NT ,即定义一个名为-DWindows_NT的预处理器宏; 这当然不是有效的标识符(类似于-D -I.