после изменения имени переменной в make-файл ее поведение резко изменилось.От неудачной компиляции до успешной.
Я перепробовал все - разные имена, добавляя различные дополнительные условия, но все безуспешно.
Версия make:
$make --version
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Thisфайл исходного кода
int main(int argc, char *argv[])
{
return 0;
}
Исходный (желательный) make-файл поведения:
SHELL = /bin/sh
.SUFFIXES:
.SUFFIXES: .c .o
CC := gcc
LD := gcc
CFLAGS := -g
STRICT_CFLAGS := -Wall -Wextra -Wpedantic -Werror
INCLUDE_CFLAGS :=
ALL_CFLAGS := $(INCLUDE_CFLAGS) $(STRICT_CFLAGS) $(CFLAGS)
STRICT_LDFLAGS := -Wall -Wextra -Wpedantic -Werror
INCLUDE_LDFLAGS :=
LDFLAGS := $(STRICT_LDFLAGS) $(INCLUDE_LDFLAGS) $(CFLAGS)
SOURCES := $(wildcard *.c)
BINARIES := $(SOURCES:%.c=%)
.PHONY: all
all: $(BINARIES)
%: %.o
@echo "Checking..."
$(LD) $(LDFLAGS) -o $@
.c.o:
@echo "Creating object..."
$(CC) $(ALL_CFLAGS) -c $< -o $@
.PHONY: clean
clean:
@echo "Cleaning up..."
-rm -rvf *.o $(BINARIES)
Скомпилировать вывод:
$make
gcc -g -Wall -Wextra -Wpedantic -Werror -g test.c -o test
test.c: In function ‘main’:
test.c:1:14: error: unused parameter ‘argc’ [-Werror=unused-parameter]
} return 0;nt argc, char *argv[])
^
test.c:1:26: error: unused parameter ‘argv’ [-Werror=unused-parameter]
} return 0;nt argc, char *argv[])
^
cc1: all warnings being treated as errors
make: *** [test] Error 1
Makefile после переименования переменной (LDFLAGS ->T_LDFLAGS) - неправильное поведение:
SHELL = /bin/sh
.SUFFIXES:
.SUFFIXES: .c .o
CC := gcc
LD := gcc
CFLAGS := -g
STRICT_CFLAGS := -Wall -Wextra -Wpedantic -Werror
INCLUDE_CFLAGS :=
ALL_CFLAGS := $(INCLUDE_CFLAGS) $(STRICT_CFLAGS) $(CFLAGS)
STRICT_LDFLAGS := -Wall -Wextra -Wpedantic -Werror
INCLUDE_LDFLAGS :=
T_LDFLAGS := $(STRICT_LDFLAGS) $(INCLUDE_LDFLAGS) $(CFLAGS)
SOURCES := $(wildcard *.c)
BINARIES := $(SOURCES:%.c=%)
.PHONY: all
all: $(BINARIES)
%: %.o
@echo "Checking..."
$(LD) $(T_LDFLAGS) -o $@
.c.o:
@echo "Creating object..."
$(CC) $(ALL_CFLAGS) -c $< -o $@
.PHONY: clean
clean:
@echo "Cleaning up..."
-rm -rvf *.o $(BINARIES)
Результат компиляции:
$make
gcc -g test.c -o test
Пожалуйста, кто-нибудь объяснит мне, почему после смены имени мы теряем флаги для строгого кода.
Спасибо за ваше время!