Makefileで”PATH”を使ってしまうと

Pocket

与太話(挨拶)

研究に関係あるようでない間抜けなお話。
物理シミュレーションのプログラムを書いている(こう書くとかっこいいな)とコンパイルの手間やパラメータの設定を楽にするために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=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 = ‘$(PATHOUT)'” >> (PARAMS_FILE)

でした。

寝不足で支離滅裂です。

というわけで、今日はこの辺で。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です