メイクファイルを呼び出すシェルを使用して、同じプロジェクトを異なる #define オプションで再コンパイルしています。
シェルは次のように makefile を呼び出します。
make UserDefined="-D SomeDefines -D InputFileName=\"input/In$SIZE.txt\"" -s
ここで、$SIZE は、たとえば 32 に等しい数値変数です。これは、プロジェクトのすべてのファイルに対して正常にコンパイルされますが、main.cpp ではなく、main.cpp のコマンドは次のとおりです。
g++ $(CFLAGS) $(Main) \
-I$(CUDA_HOME)/include \
-lpthread -o main.o
$(Main) は入力ファイルへのパスです $(CUDA_HOME) は cuda ライブラリへのパスで、$(CFLAGS) は次のとおりです: CFLAGS = -c -Wall $(UserDefined) -std=c++0x
このコマンドを実行すると、次のエラーが発生します。
../src/main.cpp: In function ‘int main()’:
../src/main.cpp:11:30: error: ‘input’ was not declared in this scope
../src/main.cpp:11:30: error: ‘In32’ was not declared in this scope
main.cpp ファイルの 11 行目:
InputSignalFile.open(InputFileName);
シェルとコマンドラインから試しました。それは動かなかった。「\」の代わりに「」も試しました。同じエラー。次のような新しい変数を作成してみました。
Var=\"input/In$SIZE.txt\"
その後 :
-D InputFileName=$Var
も機能しませんでした。しかし#define InputFileName "input/In32.txt"
、main.cpp では問題なく動作します。もちろん、毎回番号を変更する必要があるため、これを行うことはできません。何か助けて??