Makefileで”PATH”を使ってしまうと
与太話(挨拶)
研究に関係あるようでない間抜けなお話。
物理シミュレーションのプログラムを書いている(こう書くとかっこいいな)とコンパイルの手間やパラメータの設定を楽にするためにMakefileにそういうのを全部書くようになります。
Makefileの例
fc=gfortran
$PARAM_FILE=params.f90
PATH=/home/sin_idea/data1/nankasugoi/
N1=1000
all:a.out $(PARAM_FILE)
$(PARAM_FILE)
echo " module params"> $(PARAMS_FILE)
echo " implicit none" >> $(PARAMS_FILE)
echo " integer,parameter::n1=$(N1)" >> $(PARAMS_FILE)
echo " character*(*),parameter:: path = '$(PATH)'" >> (PARAMS_FILE)
まぁこのMakefileは動かないですけどこんな感じで書いちゃうじゃないですか。そうすると
gfortran:command not found
ってでてくるんですよ!
で、なんでだー!ってなってたんですけど冷静に考えたらmakefileもシェル上で動いてる?から環境変数はちゃんと使うんですよね。
つまり環境変数PATHを書きだしのディレクトリ名で上書きしちゃっているわけです。そりゃ動くわけないですね。
というわけで正解は
fc=gfortran
PARAM_FILE=params.f90
PATHOUT=/home/sin_idea/data1/nankasugoi/
N1=1000all:a.out $(PARAM_FILE)
$(PARAM_FILE)
echo ” module params”> $(PARAMS_FILE)
echo ” implicit none” >> $(PARAMS_FILE)
echo ” integer,parameter::n1=$(N1)” >> $(PARAMS_FILE)
echo ” character*(*),parameter:: path = ‘$(PATHOUT)'” >> (PARAMS_FILE)
でした。
寝不足で支離滅裂です。
というわけで、今日はこの辺で。