【发布时间】:2019-06-14 16:28:20
【问题描述】:
在将变量名称更改为 makefile 后,其行为发生了巨大变化。从不成功的编译到成功的编译。
我尝试了所有方法 - 不同的名称,添加了各种附加条件,但都没有成功。
品牌版本:
$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.
这是一个源代码文件
int main(int argc, char *argv[])
{
return 0;
}
原始(期望的)行为生成文件:
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
重命名变量后的生成文件 (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
请有人向我解释一下,为什么在名称更改后,我们会丢失严格代码的标志。
感谢您的宝贵时间!
【问题讨论】:
标签: variables makefile rename behavior