プロが教えるわが家の防犯対策術!

現在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★★

A 回答 (8件)

すでに他の方から解決策が出ていますが、一応 ANo.3 の方法でも書き入れておきます。



dev:
(タブ)make OPTION="-g0 +pathtrace=global:local +w +wlint +w1 +wsecurity=4 +check=all +check=bounds:pointer +check=truncate"

多分これでも可能かと。どのmakeかにあまり依存しないでしょう。
    • good
    • 0

man makeで



target:=string1=string2

を調べてみてください。
    • good
    • 0

「devターゲット内の$(OPTION)に代入している個所がコマンドでないと判断されエラーとなってしまう」の「エラー」とは, どんなエラーですか? どんなメッセージを, 誰が出しているのですか?



今ちょろっと調べた限りでは
とりあえずマニュアルを読め
で終わっていそうな気がする.
    • good
    • 0

とりあえずmakeは



ターゲット:
(タブ)コマンド1
(タブ)コマンド2

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

ターゲット:
(タブ)コマンド1-1 ; \
コマンド1-2 ; \
コマンド1-3

は、

ターゲット:
(タブ)コマンド1-1 ; コマンド1-2 ; コマンド1-3

と同義。
    • good
    • 0

内容的にはHP-UXのmakeとは関係なくてどのmakeでも同じ事ですが、


OPTION=-g0
は、何に対して設定したいのでしょうか?
makeから呼ばれるプログラムへの環境変数に設定したいのでしょうか?
それともmake自身の変数として設定したいのでしょうか?

この回答への補足

情報が不足しておりますね。質問時にはしょってしまいました。
正確には以下です。

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)

補足日時:2012/07/06 09:57
    • good
    • 0

身の回りに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)
    • good
    • 0

すみません。

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

この回答への補足

情報が不足しておりますね。質問時にはしょってしまいました。
正確には以下です。

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)

補足日時:2012/07/06 09:57
    • good
    • 0

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

この回答への補足

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

補足日時:2012/07/05 18:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!