2016-03-04 4 views
1

Я пытаюсь изменить make-файл таким образом, s.th. его можно запустить с nmake на Windows (7, в моем случае) и перейти от gcc к icl.wildcard не распознается при переносе makefile в 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.

Также не используется -o для компилятора windows icl.

Так что я сделал, было

# ==================================================================================== # 
# = 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. Сообщение об ошибке, которое вы отправили, выглядит как одно из nmake, которое не поддерживает эту функцию.

Используйте GNU Make (например, через MinGW) вместо этого (или переписывайте Makefile, если это возможно).

+0

Каким образом makefile должен быть переписан? – 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

Смежные вопросы