簡體   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