2016-03-04 116 views
1

我试图以s.th的方式修改makefile。可以在Windows上运行nmake(在我的情况下为7),并从gcc更改为icl。将makefile迁移到windows时无法识别通配符

由于我不知道很多关于在Windows上创建生成文件或编译的C代码,我有在得到这个工作有些麻烦......

原来的makefile是这样的:

# ==================================================================================== # 
# = Executable 
# ==================================================================================== # 

BIN = rename_me 

# ==================================================================================== # 
# = Compiler settings 
# ==================================================================================== # 

CC  = gcc 
CFLAGS += -O3 -std=c99 -Wall 
LIBS += 

# ==================================================================================== # 
# = Object Files 
# ==================================================================================== # 

%.o : %.c %.h 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

%.s : %.c 
    $(CC) $(CFLAGS) -S $< -o [email protected] 

SRCS=$(wildcard *.c) 

OBJS=$(SRCS:.c=.o) 

all: $(OBJS) 
    $(CC) $(OBJS) $(LIBS) -o $(BIN) 

clean: 
    rm -rf *.o 
    rm -rf $(BIN) 

首先,+=对于nmake不存在。

对于windows icl编译器,-o也没有。

所以我做什么,是

# ==================================================================================== # 
# = Executable 
# ==================================================================================== # 

BIN = rename_me.exe 

# ==================================================================================== # 
# = Compiler settings 
# ==================================================================================== # 
CC  = icl 
# += is an extension not supported by windows 
CFLAGS = /O3 /C99 /Wall $(CFLAGS) 
LIBS = $(LIBS) 

# ==================================================================================== # 
# = Object Files 
# ==================================================================================== # 
# no -o on win 
%.o : %.c %.h 
    $(CC) $(CFLAGS) /c $< 

%.s : %.c 
    $(CC) $(CFLAGS) /S $< 

SRCS=$(wildcard *.c) 

OBJS=$(SRCS:.c=.o) 

all: $(OBJS) 
    $(CC) $(OBJS) $(LIBS) 

clean: 
    del /S/F *.o 
    del /S/F $(BIN) 

呀,粗糙,但我想我应该看它是否运行之前,我试图找到BIN

好一个更优雅的解决方案,这不是”吨。

makefile(53) : fatal error U1000: Syntax error: missing ")"

53行,这就是SRCS=$(wildcard *.c)

尽管如此,我没有发现该行有任何问题。

回答

1

wildcard是一个GNU make扩展。您发布的错误消息看起来像nmake中的一个不支持此功能。

改为使用GNU Make(例如通过MinGW)(或者如果可行,则重写Makefile)。

+0

如何重写生成文件? – User1291

+0

明确列出源文件将是最简单的路线。如果您必须在构建时生成它,请查看此[问题](http://stackoverflow.com/questions/841597/use-nmake-to-make-all-source-in-a-directory)。但是你已经在使用'gcc',所以'gmake'可能也是可用的。只要使用它。 – a3f

+0

我没有使用gcc ...我想我确实提到了我从gcc更改为icl,完全是因为我不想使用MinGW。 – User1291