是否可以使用散列行而不是传递给GCC的每个cmdline参数?

时间:2017-08-26 08:02:05

标签: gcc g++ command-line-arguments preprocessor-directive

我使用GCC for C和G ++ for C ++。我无法在任何地方提供每个cmdline选项。

说我可以轻松地用{/ 1>替换-DHAVE_CONFIG_H

#define HAVE_CONFIG_H

所有cmdline参数都可以被#行替换吗?如果没有,args 可替换的?

我更喜欢-O2 -std=xxx -L -I

修改:我遇到了这个问题,因为当我将代码上传到在线评审员时,它总是会明确地编译它(gcc xxx.c -o xxx -lm)并赢得了#t为我打开任何优化标志。我无法修改他们的命令行,所以我想在源代码中使用它。

1 个答案:

答案 0 :(得分:0)

  

我无法在任何地方提供每个cmdline选项。

为什么呢?您使用build automation之类的GNU make工具吗?我相信你应该使用它,那么在你的Makefile中添加一些适当的行就是一个问题(可能就像添加一行CXXFLAGS += -DHAVE_CONFIG_H -O2 -std=c++11

  

所有cmdline参数都可以被#行替换吗?如果没有,什么args可以替换?

您的意思是可由预处理程序指令替换。阅读documentation of cpp

实际上,大多数编译器选项可由预处理器指令替换;特别是

  • -std=

  • -L-l以及链接器的任何其他选项

  • -I以及包含目录的类似选项

但是,-O2可以设置__attribute__((optimize("O2"))某些其他优化标记,例如function attributes#pragma GCC optimize "-O2"(请参阅this)和function specific option pragmas,例如{} def search_query(request): query_params = request.query_params.dict() 。请注意,这是GCC特有的。

我建议您花几个小时阅读documentation of GCC

您也可能更改spec file,但我不建议您这样做。