繁体   English   中英

使用Shell脚本中的-D名称编译选项

[英]Using the -D name compilation option from a shell script

我试图编写一个外壳脚本,该脚本将运行我的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”,但是也会产生错误。 很明显,脚本实际上并没有重新定义宏。 有什么想法吗? 谢谢!

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

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

#define NUMS 1

编译器警告会告诉您确切的情况。 而是考虑编写如下代码:

#if !defined NUMS
#define NUMS 1
#endif

现在,编译器仅在尚未定义NUMS时才将其重新定义为1(即,源代码中的其他位置,或者在这种情况下为命令行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM