讓我解釋一下我的情況: 我有一個包含不同類型模型的程序(比方說10,但實際數量相當高)。所有這些模型都有一個名稱和相應的文件「model1.cu」和「model1.h」。所有這些文件都有一個函數,它可以生成一個浮點數並返回它,它在所有名爲相同的文件中具有相同的參數(假設爲float returnfunction(float voltage)
)。主文件中需要這個特定的功能。 在生成文件我已經把一個選項,這樣你只編譯你將作如下計算模型的代碼:宏在makefile?有條件的h文件包含?
ifdef MODEL1
SRCS := model1.cu
OBJS := model1.o
endif
ifdef MODEL2
SRCS := model2.cu
OBJS := model2.o
endif
SRCS += main.c
現在我可以通過鍵入選擇正確的模式「讓MODEL1 = 1」。主文件中出現問題。函數returnfunction(float voltage)
在model1.h中定義,所以我應該包含它。但是,當我包括
#ifdef MODEL1
#include "model1.h"
#endif
#ifdef MODEL2
#include "model2.h"
#endif
在我的main.c文件,我得到的功能returnfunction
不被任何定義的錯誤。 有沒有辦法讓我的主文件中包含正確的h文件?最好使用我已經使用MODEL1 = 1進行編譯。
任何幫助,非常感謝!
順便說一句,一個更乾淨的方法是將每個模型放在一個單獨的子目錄中,其中的文件名爲例如'model.cu'和'model.h'。設置'VPATH'並在你的makefile中添加一個'-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。這只是一個建議,接受的答案會修復您的發佈代碼。 –