当前位置:  开发笔记 > 编程语言 > 正文

在clang命令行中覆盖参数

如何解决《在clang命令行中覆盖参数》经验,为你挑选了2个好方法。

如果我-O2 -O3在同一命令行中给clang 按顺序,是否-O3会覆盖-O2?后面的参数是否总是覆盖?
我无法在默认情况下更改的构建脚本添加-O2,我只能在其后添加内容.这是可以接受的吗?



1> Hans Passant..:

Clang驱动程序的操作在手册页面Driver Design&Internals§Driverstage中进行了描述.请注意如何使用该-###选项来转储每个阶段的结果.这不是您可以使用borken构建系统进行的操作,因为必须首先列出该选项.但是你可以验证驱动程序确实做了你希望它做的事情:

clang -### foo.cpp -O2 -O3    # dumps yayayada "-O3" yadamore
clang -### foo.cpp -O3 -O2    # dumps yayayada "-O2" yadamore

"yada"是我所省略的,因为它太多了.实际上,您指定的最后一个 -O选项是有效的选项.这是任何编译器驱动程序的预期行为.



2> Jens..:

clang从左到右处理选项.因此,最后一个-O选项"获胜".这是一个功能正是为你问的原因:所以有覆盖由别人设定的默认值(例如,一些编译系统,软件开发,...)是的,这是完全可以接受的可能性,你是在很多好公司的.

最终的参考是LLVM源代码(选项处理由cl::ParseCommandLineOptions()文件实现lib/Support/CommandLine.cpp.)

在盒子外思考:即使你不能改变构建脚本,你也可以影响它做你想做的事情.例如,优化选项可以是从选项或环境中获取的变量的一部分.例如,如果构建使用a Makefile,则可以调用CFLAGSCOPTS设置变量

make CFLAGS=-O3

如果构建使用shell脚本,可能就像

CFLAGS="-O3" ./configure

会工作.没有看到构建,没有任何说法.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有