Одно правило не запускается на этом Makefile
Я запускаю этот make-файл в WinXP:
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 $@
$(Package): $(Objs) $(Res_obj)
$(CC) $(LDFLAGS) $^ -o $@
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 $@
$(Package): $(Res_obj) $(Objs)
$(CC) $(LDFLAGS) $^ -o $@
clean:
@del $(Objs)
@del $(Res_obj)
@del $(Package).exe
run: $(Package)
./$^
1 ответ
Решение
Общее правило неверно. Для Gnu make используйте:
%.o: %.c Makefile
$(CC) $(CFLAGS) -c $<
Вы также должны заменить all
цель (команда не требуется):
all: $(Package)
И поместите его перед любыми другими целевыми правилами, чтобы сделать его целью по умолчанию.
Я также предлагаю вам включить предупреждения компилятора для обнаружения распространенных ошибок программирования:
CFLAGS=-O2 -Wall -Werror