2012-04-12 99 views
3

我有一個使用模塊的Fortran程序,即它在編譯期間創建了.mod文件。 我還寫了一個Makefile,它使用所有來自src/.f90文件將所有創建的.o文件和obj/以及當前文件夾中的二進制文件全部正常工作。Makefile:避免爲新文件夾編譯Fortran模塊

我現在在不同的計算不同的文件夾重新編譯我的程序(比如calc1/),即我複製到Makefilecalc1/,類型make allcalc1/和所有它是連接的,因爲對象的文件已經存在。但是,如果程序包含任何模塊,則編譯器需要相應的.mod文件存在於calc1/中。到現在爲止,我重新編譯了所有內容(make clean all),但隨着程序的不斷增加,這需要花費太多時間!

我想出的一個可能的解決方案是爲二進制文件提供一個特定的文件夾(bin/)。但這不是一個可行的選擇,因爲我在隊列中有工作,顯然需要一個穩定的二進制文件,而我同時也嘗試新功能。

因此,我正在尋找一種解決方案,以某種方式處理類似於.o文件的文件.mod,例如,將它們放入obj/

+0

我知道做,但我不不知道Fortran(哈!)。編譯器是否在當前目錄中建立'mod'文件?他們是否有可預測的名字(例如'foo.f90' =>'foo.mod')?你可以用編譯器的參數來控制它們的名字嗎? – Beta 2012-04-12 13:14:47

+0

右,'mod'文件在當前目錄中創建並按文件中給出的名稱命名,例如'foo.f90'包含'module bar',那麼該文件將被命名爲'bar.mod'。這在編譯期間不能被控制,因爲在其他文件中使用該名稱,即,在'main.f90'中我寫'use bar'。 – Jost 2012-04-12 13:25:04

回答

4

我期望(大多數?)編譯器會指定一個選項來更改模塊文件路徑。與gfortran,該選項-J-M(從該名男子頁):

-Jdir 
-Mdir 
     This option specifies where to put .mod files for compiled modules. It is also 
     added to the list of directories to searched by an "USE" statement. 

     The default is the current directory. 

     -M is deprecated to avoid conflicts with existing GCC options. 

我認爲大多數編譯器尋找.mod文件的目錄中包含-I

編輯

由於gfortran 4.6,-M已不再受支持。使用基於我的配置腳本的一個-J

,標誌是-moduleifortpgf90雖然我幾乎從來不使用這些編譯器這些天,以便其他人應確認...

+0

確認。它是'ifort'的'-module'。謝謝你的幫助! – Jost 2012-04-12 13:32:27

+0

沒問題。很高興幫助。 – mgilson 2012-04-12 13:43:17