2015-03-30 8 views
0

Я бегу этот Makefile в WinXP:одно правило не работает на этом Makefile

Package=killerapp 

Sources=main.c 
Resource=resource\resource.rc 

Objs=$(Sources:.c=.o) 
Res_obj=$(notdir $(Resource:.rc=.o)) 

CC_RES=windres 
CC=gcc 

CFLAGS= 
LDFLAGS=-mwindows 

%.o.c: 
    $(CC) $(CFLAGS) -c $< 

$(Res_obj): $(Resource) 
    $(CC_RES) $< -o [email protected] 

$(Package): $(Objs) $(Res_obj) 
    $(CC) $(LDFLAGS) $^ -o [email protected] 

all: 
    $(MAKE) $(Package) 

clean: 
    @del $(Objs) 
    @del $(Res_obj) 
    @del $(Package).exe 

Моя идея заключается в том, чтобы сначала скомпилировать файл ресурсов и позже исходные файлы, но, кажется, что только windres запускается и исходные файлы не скомпилированы, никаких идей?

Обновлено № 1: Эта работа как ожидается.

Package=killerapp 

Sources=main.c 
Resource=resource\resource.rc 

Objs=$(Sources:.c=.o) 
Res_obj=$(notdir $(Resource:.rc=.o)) 

CC_RES=windres 
CC=gcc 

CFLAGS=-O2 -Wall -Werror 
LDFLAGS=-mwindows 

all: $(Package) 

%.o: %.c 
    $(CC) $(CFLAGS) -c $< 

$(Res_obj): $(Resource) 
    $(CC_RES) $< -o [email protected] 

$(Package): $(Res_obj) $(Objs) 
    $(CC) $(LDFLAGS) $^ -o [email protected] 

clean: 
    @del $(Objs) 
    @del $(Res_obj) 
    @del $(Package).exe 

run: $(Package) 
    ./$^ 

ответ

1

Общее правило неверно. Для Гну сделать, используйте:

%.o: %.c Makefile 
    $(CC) $(CFLAGS) -c $< 

Вы также должны заменить all цели (без команды требуется):

all: $(Package) 

И поместите его перед любыми другими целевыми правилами, чтобы сделать его цель по умолчанию.

Я также предлагает вам включить предупреждения компилятора поймать распространенные ошибки программирования:

CFLAGS=-O2 -Wall -Werror 
+0

Спасибо человек, это помог советам – Joel

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

  • Нет связанных вопросов^_^