• ベストアンサー

VisualC++で外部プロジェクトの設定

VisualC++でMakefileプロジェクトを作成すると、[プロジェクト]-[設定]でビルド設定ができますが、この中で[一般]タブ-[出力ファイル名]と[デバッグ]-[作業用のディレクトリ]の設定がよく分かりません。 これらを特に設定してもしなくても問題なくビルドできるようですが・・・ 何に使用されている設定なんでしょうか? 宜しくお願いします。 MSDN http://www.microsoft.com/japan/developer/library/vccore/_core_create_an_external_project.htm

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.7

#2です。 VS2003なら先の提示方法で動作しているのですが、VC6でしたか.....。 MSのサポートも切れましたし、可能なら移行を推奨。 一応、VC6を久々に起動してみましたが、確かに環境変数は利かないようです。 VC6用のMSDNなどは入れていないので確認していませんが、動かしてみた範囲では、「出力ファイル名」の設定を直接的に反映させる方法は見当たりませんでした。 出力ファイル名の指定は、Makefile を編集して、 その中で勝手にやってくれと言っているように見えます。 VC6 がエクスポートする Makefile を見ても、NMAKE に環境変数 CFG を渡して、内部で動作を切り替えるようにしてるだけのようです。 出力ファイル名等を直接指定しているわけではありませんでした。 (ディレクトリを Makefile 内部で定義して、出力ファイル名はハードコーディングしてる) NMAKE をかませて、その引数でマクロを指定するとか、 出力ファイル名は完全に無視して、Makefile で環境を完結させるとか、そういった用法が VC6 の想定のように思えます。 →出力ファイル名が外部指定したければ、コマンドラインで直接引数に指定する。 ちなみに、VC6用ではありませんが、手元の MSDN には以下ようにあります。 「Visual C++ の概念: プロジェクトの作成および管理  メイクファイル プロジェクトの作成   プロジェクトで指定した出力ファイルは、   ビルド スクリプトの生成するファイルの名前には直接は影響しません。」 提示したように独自に環境変数を指定することはできますが、 やはり何もしなければ単に無視されるようです。

参考URL:
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
main531
質問者

お礼

せっかく設定があるのに使えないのは残念ですが・・・ メイクファイルでなんとかする方向で考えたいと思います。 ありがとうございました。

その他の回答 (6)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.6

#2です。 まず、バッチファイルは本題ではないようですので、簡単にパラメータ引数を取れるように修正していただくとして。 VC.NET2003での例ですが、プロジェクトのプロパティの、 例えば[デバッグ]->[コマンド引数]で、 入力欄右側の[▼]から、<編集>を選択。 →[コマンド引数]ダイアログの[マクロ>>]ボタンを押す。 →利用可能なものがリストで列挙されてます。 ※適用されたときに展開される文字列もあるので、  変数名とあわせて見れば用途が大体わかるかと。 後はこれを、プロセスに渡したい、適切なデータにあわせて、 例えば以下のような形で参照すればよろしいかと。 cmd /C test.bat $(TargetFileName)

main531
質問者

お礼

すみません。 [コマンドライン]に下記の通りに設定すると$(TargetFileName)という「$(TargetFileName)」というファイル名になってしまうんですが・・・ cmd /C test.bat /o $(TargetFileName) またVC++6.0なんですが、<編集>の項目がありませんでした。 色々探してはみたんですが・・・

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.5

#2です。 > この設定でファイルを出力させることはできましたが、 > 出力先はバッチファイルで指定しているフォルダで、 > [出力ファイル名]で指定したフォルダではありませんでした。 ファイルが出力されたのならそれで正常です。 何か勘違いされているように見受けられますが、 実行するツールのコマンドラインで出力ファイルの指定ができなければ、出力ファイル名を指定しても意味がありません。 現在のバッチファイルは単に dir を実行するだけですから、当然そのままのファイル名でファイルが作られます。 > ~\デスクトップ\maketest\test.txt > DIR > "test.txt" この両者が同じものだなどとは、 dir は勝手に判断してくれません。 バッチファイルにパラメータ(dir > %1 等)を取れるようにして、VC側の環境変数$(....)でその出力ファイル名を渡すなりしてください。 そうでなければ、出力ファイル名の指定は単に無視されます。 # ちなみに、本番も dir なのでしょうか。

main531
質問者

お礼

何度もご回答頂きありがとうございます。 この環境変数$(....)というのはどこを調べればいいのでしょうか? MSDNも検索してみたのですが、探し方が悪いのか見つけることができませんでした。 また今回のバッチファイルはあくまでテスト用ですので。 宜しくお願い致します。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.4

#2です。 > c:\windows\system32\cmd.exe "test.bat" この意図が「cmd 経由でバッチファイルが起動したい」ということなら、指定方法が違います。これではtest.bat は起動してないです。「cmd /?」を参照してください。 cmd /C test.bat # ただのテストっぽいので些事ですが、フルパスだと # 環境次第でcmd が見つからないと思います。

main531
質問者

お礼

ご指摘ありがとうございます。 [コマンドライン] cmd /C "test.bat" この設定でファイルを出力させることはできましたが、出力先はバッチファイルで指定しているフォルダで、[出力ファイル名]で指定したフォルダではありませんでした。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

[一般]タブ-[出力ファイル(F)] では、exeファイルをどのフォルダーに出力するかを 指定します。 適当なフォルダーを作って、 指定してみればその中にexeファイルが出来ます。 [リンク]タブ-[出力ファイル名] では、exeファイルの名前を指定します。

main531
質問者

お礼

ご返答頂きありがとうございます。 「Makefileプロジェクト」の場合、プロジェクトの設定の中に[一般]と[デバッグ]のタブのみで[リンク]タブは存在しておりません。 下記の設定で試してみましたが出力ファイルは生成されませんでした。 どうしたらファイル出力することができるのでしょうか? [コマンドライン] c:\windows\system32\cmd.exe "test.bat" [出力ファイル名] C:\Documents and Settings\main\デスクトップ\maketest\test.txt test.bat(バッチファイル) -------------------- DIR > "test.txt" EXIT --------------------

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

作業用ディレクトリの方は、プログラムの実行されるカレントディレクトリを明示的に指定するために使います。 例えば、プログラムがファイルなどを参照する際に、特に指定がなければカレントディレクトリのファイルを見ます。 # GetCurrentDirectry とかも参照 そういったプログラムのデバッグでは、特定のディレクトリを指定してデバッグすることに意味があります。 そうでなければ、デフォルトのままでも特に問題ありません。 # ちなみに、実行時用の設定なので、ビルド自体には影響しません。

main531
質問者

お礼

ご回答ありがとうございます。 これでよく理解できました。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.1

1つだけ分かります。 出力ファイル名は exeファイルの名前を変更できます。 特に設定しないときに abc.exe が作られるとします。 出力ファイル名を def.exe にすれば、 コンパイル、リンクの結果 def.exe が出来ます。

main531
質問者

お礼

ご回答ありがとうございます。 申し訳ありませんがまだよく分かりません。 「exeファイル」というのは[一般]タブ-[コマンドライン]で指定した実行ファイルのことだと思われますが、自作したプログラムの場合には出力ファイルは[出力ファイル名]で指定したものに関係なくそのプログラム内で指定されると思います。 この設定はどのような場合に作用するのでしょうか?