• 締切済み

HP-UXでのMakeファイルの文法について

現在HP-UX11.23環境にて開発をしております。 その中でMakeファイルを作成しているのですが 文法的な誤り、または他の原因があるのかは不明ですが以下の処理が実現できません。 知識のある方いらしたら解決方法を教えて下さい。 内容 ------------------------------ cleanというターゲットをmakeファイル内に定義し(以下参照)、 make cleanとコマンドラインから実行した場合にのみそこに定義されている処理を行う。 しかし以下★の個所がコマンドではないと判断され??エラーとなってしまう。 試しにexport OPTION=-g0と書き換えてもexportはされない。 『OPTION=-g0』の設定を実現するにはどのように記述すればよいのでしょうか。 OPTION=-g0の前にタブを入れないと、make cleanと実行しようが、make と実行しようが設定が有効になってしまいます。 あくまでmake cleanの時のみ有効にしたいのですが。。。 clean: (タブ)$(RMF) $(TARGET) $(OBJS) $(PCFILE) ./*.lis (タブ)OPTION=-g0★★

みんなの回答

noname#208507
noname#208507
回答No.8

すでに他の方から解決策が出ていますが、一応 ANo.3 の方法でも書き入れておきます。 dev: (タブ)make OPTION="-g0 +pathtrace=global:local +w +wlint +w1 +wsecurity=4 +check=all +check=bounds:pointer +check=truncate" 多分これでも可能かと。どのmakeかにあまり依存しないでしょう。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.7

man makeで target:=string1=string2 を調べてみてください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

「devターゲット内の$(OPTION)に代入している個所がコマンドでないと判断されエラーとなってしまう」の「エラー」とは, どんなエラーですか? どんなメッセージを, 誰が出しているのですか? 今ちょろっと調べた限りでは とりあえずマニュアルを読め で終わっていそうな気がする.

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

とりあえずmakeは ターゲット: (タブ)コマンド1 (タブ)コマンド2 コマンド1やコマンド2を実行するとき、それらにリダイレクト文字'>'やパイプ'|'などが含まれていなければ(他にも条件はあったと思うけど割愛)、/bin/shを経由せずに直接実行します。 またコマンド1,コマンド2は実行されるとき別プロセスなので仮にコマンド1で環境変数を設定しようがコマンド2には全くの無関係です。ライフタイムはその行のコマンドの間だけ。 また'\'を使って複数行を1つの行として扱うこともできます。 ターゲット: (タブ)コマンド1-1 ; \ コマンド1-2 ; \ コマンド1-3 は、 ターゲット: (タブ)コマンド1-1 ; コマンド1-2 ; コマンド1-3 と同義。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

内容的にはHP-UXのmakeとは関係なくてどのmakeでも同じ事ですが、 OPTION=-g0 は、何に対して設定したいのでしょうか? makeから呼ばれるプログラムへの環境変数に設定したいのでしょうか? それともmake自身の変数として設定したいのでしょうか?

0125yutaro
質問者

補足

情報が不足しておりますね。質問時にはしょってしまいました。 正確には以下です。 makeと実行した場合はTARGETターゲットのみを実行する為、 コンパイル時(cc)の$(OPTION)変数は空白なので何も$(OPTION)変数に関しての オプションは付与されない。 make developと実行した場合はdevターゲットを実行して$OPTION変数にオプションが設定され コンパイル時(cc)に$OPTION変数に設定されたオプションを有効にしたい。 しかしdevターゲット内の$(OPTION)に代入している個所がコマンドでないと判断されエラーとなってしまう。かといってタブを入れないとmakeと実行した場合にも変数設定が有効になってしまう。 つまりmake developと実行した場合のみ変数に特定の値を設定、 makeと実行した場合は変数に値を設定せず コンパイルさせるということを実装したいのですがうまくいきません。 ------------------------------------ OPTION = all: $(TARGET) clean: (タブ) (RMF) $(TARGET) $(OBJS) $(PCFILE) ./*.lis dev: (タブ) OPTION=OPTION=-g0 +pathtrace=global:local +w +wlint +w1 +wsecurity=4 +check=all +check=bounds:pointer +check=truncate develop:dev all rebuild: clean all $(TARGET): $(OBJS) $(HEAD) $(PCFILE) (タブ) $(CC) $(LFLAGS32) -o $(TARGET) $(SHLIB_FLAGS) $(OBJS) $(SHLIB_LIBS) \ +DD32 $(OPTION)

noname#208507
noname#208507
回答No.3

身の回りにHP-UXがないのでHP-UXのmakeで確認をとれないのですが、下のようにすれば make clean のときに-g0がechoされ、ただmakeと打ったときは-g1がechoされると思います。 OPTION=-g1 all: (タブ)echo $(OPTION) clean: (タブ)make OPTION=-g0 clean-local clean-local: (タブ)$(RMF) $(OBJS) $(PCFILE) ./*.lis (タブ)echo $(OPTION)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

すみません。これで何がやりたいのでしょうか? 設定したいのは、Make内の変数なのでしょうか?環境変数なのでしょうか? ここでOPTIONを設定したところで、その後使っている様子が無いし、無意味に思えるのですが?

0125yutaro
質問者

補足

情報が不足しておりますね。質問時にはしょってしまいました。 正確には以下です。 makeと実行した場合はTARGETターゲットのみを実行する為、 コンパイル時(cc)の$(OPTION)変数は空白なので何も$(OPTION)変数に関しての オプションは付与されない。 make developと実行した場合はdevターゲットを実行して$OPTION変数にオプションが設定され コンパイル時(cc)に$OPTION変数に設定されたオプションを有効にしたい。 しかしdevターゲット内の$(OPTION)に代入している個所がコマンドでないと判断されエラーとなってしまう。かといってタブを入れないとmakeと実行した場合にも変数設定が有効になってしまう。 つまりmake developと実行した場合のみ変数に特定の値を設定、 makeと実行した場合は変数に値を設定せず コンパイルさせるということを実装したいのですがうまくいきません。 ------------------------------------ OPTION = all: $(TARGET) clean: (タブ) (RMF) $(TARGET) $(OBJS) $(PCFILE) ./*.lis dev: (タブ) OPTION=OPTION=-g0 +pathtrace=global:local +w +wlint +w1 +wsecurity=4 +check=all +check=bounds:pointer +check=truncate develop:dev all rebuild: clean all $(TARGET): $(OBJS) $(HEAD) $(PCFILE) (タブ) $(CC) $(LFLAGS32) -o $(TARGET) $(SHLIB_FLAGS) $(OBJS) $(SHLIB_LIBS) \ +DD32 $(OPTION)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「エラーとなってしまう」ってのは, なんかメッセージが出てるんですよね. そのメッセージは?

0125yutaro
質問者

補足

正確に申しますとmake clean実行時にexport OPTION=g0+と表示されるだけでその設定は有効になりません。 echo $(OPTION)と追加してもとくに何も表示されません。(空白)

関連するQ&A