下周高级计算机网络课要复现并且汇报A会文章,成功复现就能拿A。我选了篇sketch的,sliding sketch, SIGKDD 20’。
没想到编译发现一定要stdc++11,一堆错误。挨个改Makefile确实可以,但是太费劲,所以想在.bashrc里面加个alias别名,
g++='g++ -std=c++11'
没想到一点用都没有。所以还是改了回去。使用自己写的脚本测试发现,alias在shell脚本中用不了,发现因为如下原因。
简要说,是因为shell分为交互模式和非交互模式,脚本执行时默认是非交互,普通命令行默认是交互,而alias在非交互模式下默认是无法使用的,需要使用shopt命令支持expand_aliases才行。
但是我发现即便使用了shopt,在脚本后面make时也没设置成stdc++11。有人说是因为,make使用的不是bash,而是sh,所以不会将.bashrc作为配置文件,不管.bashrc里有什么都没用。至于如何改,语焉不详。但是.bashrc里的别名不能用于makefile,这样设计是为了兼容性更好,不会出现由于一台设备上的别名其他设备上没有而使编译变复杂的情况。相关说法如下。