Ich versuche, ein Shell-Skript zu schreiben, das mehrere Tests meines C++ - Programms ausführen wird, wobei jedes Mal ein Makro neu definiert wird, wenn es ausgeführt wird. Ich versuche, die -D Name Preprozessor-Option zu verwenden (siehe https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html), aber ich bekomme ständig die Warnung, dass das Makro neu definiert wird, und dann das Programm ausgeführt wird, ohne es neu zu definieren.Verwenden der -D-Kompilierungsoption aus einem Shell-Skript
Mein Skript ist wie folgt:
#!/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
In meiner C++ Datei, project01.cpp, ich feststellen:
#define NUMS 1
Ich habe versucht, die '1' auszulassen, aber das erzeugt Fehler auch. Es ist klar, dass das Skript das Makro nicht wirklich neu definiert. Irgendwelche Gedanken? Vielen Dank!
Es ist genau das, was die Warnung sagt, Sie definieren es neu. Sie haben es einmal in der Befehlszeile und erneut in der Datei definiert. Wenn Sie es über die Befehlszeile _override_ wollen, umgeben Sie die Definition in Ihrer Quelle innerhalb eines '#ifndef NUMS' /' # endif'-Paares. Es ist klar, dass das Skript das Makro nicht wirklich neu definiert - Sie haben Recht. Die Neudefinition erfolgte in Ihrer '#define NUMS 1' Quelle. Die Befehlszeile wurde zuerst angezeigt. – mah