私の状況を説明しましょう: 私は、さまざまな種類のモデルを含むプログラムを持っています(実際の数値はかなり高いですが、10としましょう)。これらのモデルはすべて、名前と対応するファイル "model1.cu"と "model1.h"を持っています。これらのファイルには、1つの浮動小数点数を生成し、それを返す関数があります。これは、同じ引数を持つ同じ名前のすべてのファイルにあります(たとえば、float returnfunction(float voltage)
とします)。この特定の機能はメインファイルに必要です。今、私は「MODEL1 = 1を作る」と入力して、正しいモデルを選択することができますマクロはmakefileにありますか?条件付きhファイルのインクルード?
ifdef MODEL1
SRCS := model1.cu
OBJS := model1.o
endif
ifdef MODEL2
SRCS := model2.cu
OBJS := model2.o
endif
SRCS += main.c
:私はあなたが次のようにして計算されるモデル用のコードのみをコンパイルするようにオプションを入れているmakefileで 。この問題は、メインファイルで発生します。関数returnfunction(float voltage)
はmodel1.hで定義されているので、それを含める必要があります。私は私のmain.cファイルに
#ifdef MODEL1
#include "model1.h"
#endif
#ifdef MODEL2
#include "model2.h"
#endif
が含まれている場合でも、私は機能returnfunction
がどこにも定義されていないというエラーが表示されます。 メインファイルに正しいhファイルが含まれていますか? MODEL1 = 1を使用して既にコンパイルしていることをお勧めします。
何か助けていただければ幸いです!
ところで、これを行うためのよりクリーンな方法は、各モデルを個別のサブディレクトリに配置することです。 'model.cu'と' model.h'です。 'VPCS'を設定し、メイクファイルから' -I'フラグを追加すると 'main.cに' SRCS:= model.cu'、 'OBJS:= model.o'と' #include ' '。 –
あなたのアイデアは気に入っていますが、VPATHと-Iの使用について指定することはできますか?私はmakefileのすべての可能なオプションに精通しておらず、ドキュメントはしばしば私にとっては理解しがたいものです。 私が知りたいのは、makefileに入れる行です(マップはNewModelと呼ばれ、model.cuとmodel.hを含んでいると仮定します)(残りのコンセプト)。それは次のようなものですか?#ifdef MODEL1 VPATH = -I ./NewModel #endif? – Tim
コメントが長すぎるので、答えを書いたので、基本的にそこにあるすべての 'ifdef'が削除されます。それは単なる提案です、受け入れられた答えは投稿されたコードを修正します。 –