使用shell脚本中的-D name compilation选项

时间:2016-04-18 23:40:38

标签: c++ shell compilation macros

我正在尝试编写一个shell脚本,它将运行我的C ++程序的多个测试,每次运行时重新定义一个宏。我正在尝试使用-D 名称预处理器选项(请参阅https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html),但我一直收到重新定义宏的警告,然后程序在不重新定义的情况下执行它。

我的脚本如下:

#!/bin/bash

#NUMS is number of subdivisions:
for subdiv in 10 100 500 1000
do
    echo NUMS = $subdiv
    g++ -D NUMS=$subdiv project01.cpp -o project01 -lm -fopenmp
    ./project01 >> bezier_results.txt
done

在我的C ++文件project01.cpp中,我声明:

#define NUMS 1

我试过省略'1',但这也会产生错误。很明显,脚本实际上并没有重新定义宏。有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

通过使用-DNUMS=100在命令行上定义宏,您提供了默认值。

当您执行以下操作时,您的代码将覆盖该默认值:

#define NUMS 1

编译器警告正在告诉您到底发生了什么。而是考虑编码这样的代码:

#if !defined NUMS
#define NUMS 1
#endif

现在编译器只会在尚未定义的情况下将NUMS重新定义为1(即源中的其他地方,或者在这种情况下是命令行。)