文件名:"dev“
export CFLAGS="-g -O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE"
export CXXFLAGS="-g -O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE"在编译我的项目之前,我使用了源代码开发,因此echo $CFLAGS $CXXFLAGS将是我分配给它的值。
但是如何更改Makefile中的环境变量呢?我试过了,但失败了。
[root@centos-linux-10 make]# cat Makefile
all:
export CFLAGS="-O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE"
export CXXFLAGS="-O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE"
@echo $(CFLAGS)
@echo $(CXXFLAGS)
[root@centos-linux-10 make]# make
export CFLAGS="-O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE"
export CXXFLAGS="-O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE"
-g -O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE
-g -O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE
[root@centos-linux-10 make]# 经过几次尝试,我得到了this.In makefile我响应了CFLAGS和CXXFLAGS,它们是新的值,在做完之后,为什么它的价值会返回?
[root@centos-linux-10 make]# cat Makefile
export CFLAGS="-O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE"
export CXXFLAGS="-O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE"
all:
@echo $(CFLAGS)
@echo $(CXXFLAGS)
[root@centos-linux-10 make]# echo $CFLAGS
-g -O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE
[root@centos-linux-10 make]# echo $CXXFLAGS
-g -O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE
[root@centos-linux-10 make]#
[root@centos-linux-10 make]# make
-O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE
-O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE
[root@centos-linux-10 make]#
[root@centos-linux-10 make]# echo $CFLAGS
-g -O2 -Wall -std=gnu99 -fno-strict-aliasing -D_GNU_SOURCE
[root@centos-linux-10 make]# echo $CXXFLAGS
-g -O2 -Wall -fno-strict-aliasing -D_GNU_SOURCE发布于 2018-12-12 21:06:50
首先,如@JonathanLeffler所述,菜谱的每一行都在自己的shell中运行。每次shell退出时,它都会忘记它的所有变量(这样做有一些非常好的安全理由)。因此,不能在下一行访问菜谱一行中的变量集。解决这一问题的一个更常见的方法是只使用一行作为您的菜谱。我应该指出,您还在使用$(CFLAGS)尝试引用bash变量。Make将在将$(CFLAGS)传递给bash之前将其扩展到其内部变量,因此在您的示例中,甚至没有使用bash变量。
为了说明:
foo:
@SOMEVAR=hello; \
echo $@:$$SOMEVAR
bar:
@SOMEVAR=hello;
@echo $@:$$SOMEVAR
MAKEVAR:=goodbye
foobar:
@echo "$@:$(MAKEVAR)"然后你得到:
tmp> make foo bar foobar
foo:hello
bar:
foobar:goodbye注意foo菜谱第一行末尾的';‘和'\’。\将两个recpies行连接为一个,;告诉bash作为两个单独的命令运行。还请注意第二行缺少@符号,因为bash不理解@。最后,在foobar配方中,在make变量前面只有一个$,这意味着它由makefile展开,但是在foo和bar变体前面有两个$$(在传递给bash之前扩展到单个$ )。
https://stackoverflow.com/questions/53746070
复制相似问题