我想设置一个变量$(CFLAGS2)来保存不同的值,具体取决于我制作的目标。具体来说,我希望有一个目标用“-g -Wall”编译我的项目,另一个用“-O3”编译
我试过这样:
CC=gcc
COPT=-c $< -o $@ $(CADD) $(CFLAGS) $(CFLAGS2)
.PHONY: opti
.PHONY: debi
opti: seto
make hammingtest
debi: setd
make hammingtest
.PHONY: seto
seto:
$(eval CFLAGS2 := -O3)
.PHONY: setd
setd:
$(eval CFLAGS2 :=-g -Wall)
hamming.o: hamming.cpp hamming.h
$(CC) $(COPT) $(DEFS) $(CFLAGS2)
hammingtest.o: hammingtest.cpp hamming.h
$(CC) $(COPT) $(DEFS) $(CFLAGS2)
hammingtest: hammingtest.o hamming.o
$(CC) -o hammingtest hammingtest.o hamming.o
但是当我做“debi”时,就好像$(CFLAGS“)根本没有设置(与”make opti“相同) 我怎样才能做到这一点?
答案 0 :(得分:0)
不要在shell行中使用$(eval ...)
。这通常是完全错误的。
有很多方法可以做你想要的。由于您已经设置了递归make,因此可以使用命令行变量:
opti:
${MAKE} COPTS2='-O3' hammingtest
debi:
${MAKE} COPTS2='-g -Wall' hammingtest
更好的风格是避开递归制作,可能支持目标特定变量:
CC=gcc
COPT=-c $< -o $@ $(CADD) $(CFLAGS) $(CFLAGS2)
CFLAGS2 = $(error Someone tried to deref CFLAGS2!)
opti: CFLAGS2 := -O3
debi: CFLAGS2 := -g -Wall
.PHONY: all
all:
@echo 'What do you want to make?'
.PHONY: opti debi
opti debi: hammingtest
opti debi: ; @echo $@ Success
.
.
.
这看起来很粗略。
这种设置的方式虽然有问题。例如,以下shell命令序列将为您提供优化的构建,没有警告。
$ make opti
$ make debi