【发布时间】:2018-12-13 05:13:57
【问题描述】:
文件名:“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]#
经过几次尝试,我得到了这个。在makefile中我回显了CFLAGS和CXXFLAGS,它们是新的值,在make之后,为什么thme的值又回来了???
[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
【问题讨论】:
-
第一个导出命令在一个 shell 中运行,第二个在另一个 shell 中运行,echo 命令在另外两个 shell 中运行。您在第一个 shell 中所做的操作不会影响任何其他 shell。您可以尝试弄乱
.ONESHELL:以使测试“工作”。但是,这不是您问题的解决方案。您可以在makefile中设置 CFLAGS 等。您可以使用make -e更改makefile 中环境和设置的优先级。