2012-11-07 56 views
0

我有幾個編譯器具有相同的名稱,但具有不同的版本或位置。 ./configure腳本似乎停止在PATH中找到的第一個腳本。我如何告訴Automake根據自定義規則選擇其中之一?我已經有了一個可以檢查編譯器版本的宏。如何在Automake中選擇一個編譯器版本?

我想避免手動設置路徑(使用FC變量),因爲每次輸入整個路徑都很麻煩。

就我而言,幾個MPI包裝器編譯器位於不同的目錄中,並且名稱相同(並且由用戶添加到PATH)。

這個想法是使用類似./configure --with-intel的東西來查找並選擇IntelMPI編譯器。

回答

0

我的解決方案:使用自定義匹配條件,在宏中複製configure的搜索策略。解析PATH通過設置IFS變量(已在configure中定義)完成。在bash中,發現所有的可執行文件會是這樣的:

#!/bin/bash 

IFS=":" 
exe="mpif90" 
for dir in $PATH 
do 
    if test -f "$dir/$exe"; then 
    custom_test($dir/$exe) 
    fi 
done 

注:這在manual

如果需要檢查程序的行爲,以及找出建議報告無論它是否存在,你都必須爲它編寫自己的測試。

1

我的解決方案是通過shell腳本設置CC和其他「寶貴」變量,其中很多用於交叉編譯。所以,我有一大堆的shell腳本的內容與坐在身邊一樣:

export CROSS_COMPILE=arm-linux 
export CC=${CROSS_COMPILE}-gcc 
... 
PATH=$PATH:/some/arm/compiler/bin:/some/arm/compiler/usr/bin # for arm compiler tools 
export CFLAGS="..." 

成立configure配置。所以在配置的時候我這樣做:

source /path/to/configuration/some-arm-compiler.sh 
./configure ... 

它節省了大量的輸入。

編輯:因此,它可以工作於你的具體情況是這樣的:

mpi-a.sh

export FC=mpif90 
PATH=$PATH:/path/to/mpi-a/bin:/path/to/mpi-a/usr/bin 

mpi-b.sh

export FC=mpif90 
PATH=$PATH:/path/to/mpi-b/bin:/path/to/mpi-b/usr/bin 

所以用於編譯其中之一:

source /path/to/mpi-a.sh 
./configure ... 

另:

source /path/to/mpi-b.sh 
./configure ... 
+0

如果你有幾個編譯器具有相同的名稱,但在不同的位置? –

+0

確保在腳本中設置的PATH設置正確,只找到需要的。這似乎是你已經在做的事情。 – ldav1s

+0

我採取了相反的做法:用戶必須將所有可能的路徑附加到PATH,並且'configure'根據其選項選擇其中的一個。你的方法很有趣(當然,在UNIX的精神上比我的方法更多),但是你必須擁有與編譯器一樣多的腳本。而且這些腳本是依賴於機器的,因此不是便攜式的。 –

相關問題