none
コマンドラインのパス名の簡単化 RRS feed

  • 質問

  • vc++2008expressinでDLLを作っています。できたオブジェクトDLLを所定の場所にコピーするため、プロパティーページのビルド後のイベントのコマンドラインで、copyコマンドをセットしたいのですが、送りもとのパスが長く、簡単に設定できる$(obj)のような書き方を教えてください。

    copy source_path  destination_path

    source_path を簡単に書きたい。

    2012年7月2日 12:38

回答

  • ビルドのコマンドとプロパティのマクロ

    これが参考になりますかね。

    • 回答としてマーク 山本春海 2012年7月9日 2:03
    2012年7月2日 12:48
  • "$(OutDir)\$(ProjectName).dll" でダメですか? 空白の有無にかかわらずダブルクォートを付けても構わないですし。

    # XMLに属性値として直接書く場合は "$(OutDir)\$(ProjectName).dll" とかだんだんややこしいことになってきますね。

    • 回答としてマーク 山本春海 2012年7月9日 2:03
    2012年7月3日 0:45
  • 複数のEXEプロジェクトが、当該DLLを参照する場合など、
    そのDLLをコピーする必要が発生するケースもあります。

    が、そのDLLを参照するEXEが単一である場合は、
    当該DLLプロジェクトの出力ディレクトリを、
    対象としている実行ファイルのプロジェクトの出力ディレクトリと
    同じにしてしまうという手もありますね。
    この場合コピーは不要となります。

    2012年7月3日 8:07

すべての返信

  • ビルドのコマンドとプロパティのマクロ

    これが参考になりますかね。

    • 回答としてマーク 山本春海 2012年7月9日 2:03
    2012年7月2日 12:48
  • ご返事ありがとうございます。
    思い出しました。省略パス名はそんな感じでした。また他のことも参考になりました。

    それで、件のコマンドライン欄に下記の通り書き、再ビルドをしましたが、このcopyでエラーになります。
    ログを見ると正しいように見えます。スペルは間違いないと思うのですが・・・。(librariesフォルダに送ります)
    このエラーはソースパスがエラーなのか、デストネーションパスなのでしょうか。

    copy $(OutDir)\$(ProjectName).dll c:\fxdd\experts\libraries


    1>ビルド後のイベントを実行しています...
    1>指定されたファイルが見つかりません。
    1>Project : error PRJ0019: ツールはエラー コードを返しました : "ビルド後のイベントを実行しています..."

    ログ
    copy C:\Documents and Settings\fujiokashigesada\My Documents\Visual Studio 2008\Projects\binary_eu\Release\binary_eu.dll c:\fxdd\experts\libraries

     

    2012年7月2日 13:53
  • 空白が混ざるパスの場合、""でくくらないといけませんが?
    2012年7月2日 14:06
  • 直接書く場合はそのようであるかもしれませんが、今回は、$(OutDir)\$(ProjectName)のような、マクロ?が展開されただけですのでよいかとおもうのですが。””はどのように書きますか?
    2012年7月3日 0:11
  • マクロが展開された結果、

    copy C:\Documents and Settings\fujiokashigesada\My Documents\Visual Studio 2008\Projects\binary_eu\Release\binary_eu.dll c:\fxdd\experts\libraries

    になるわけですよね? で、それをcmd.exeに渡すわけです。

    cmd.exeは空白で引数を区切りますから、「copy」「C:\Documents」「and」「Settings\fujiokashigesada\My」(以下略)といった引数として認識することになります。当然期待するパスは渡せてません。

    どのように書きますかって、そのまま直接書いてください。「copy "$(OutDir)"」と書けば、$(OutDir)が展開されて「copy "C:\Documents and Settings(略)Release"」になります。

    // プロジェクトが出力するexe/dllのパスを直接表すマクロもあったはずですけど。

    2012年7月3日 0:36
  • "$(OutDir)\$(ProjectName).dll" でダメですか? 空白の有無にかかわらずダブルクォートを付けても構わないですし。

    # XMLに属性値として直接書く場合は "$(OutDir)\$(ProjectName).dll" とかだんだんややこしいことになってきますね。

    • 回答としてマーク 山本春海 2012年7月9日 2:03
    2012年7月3日 0:45
  • なるほど。理屈は承知していたのすが、マクロといえども、展開後は適用されるわけですね。

    copy "$(OutDir)"の記述は気きがつきませんでした。言われてみると他の参考サイトにもそのように書いてあった気が・・・・・。

    2012年7月3日 6:03
  • そのようにかけるのですか。試してみます。
    2012年7月3日 6:09
  • >// プロジェクトが出力するexe/dllのパスを直接表すマクロもあったはずですけど。

    copy "$(TargetPath)" c:\fxdd\experts\libraries

    ですね。

    2012年7月3日 6:16
  • 複数のEXEプロジェクトが、当該DLLを参照する場合など、
    そのDLLをコピーする必要が発生するケースもあります。

    が、そのDLLを参照するEXEが単一である場合は、
    当該DLLプロジェクトの出力ディレクトリを、
    対象としている実行ファイルのプロジェクトの出力ディレクトリと
    同じにしてしまうという手もありますね。
    この場合コピーは不要となります。

    2012年7月3日 8:07
  • ご返事がおそくなりました。教えていただきありがとうございます。試してOKでした。
    2012年7月6日 10:53
  • ご返事がおそくなりました。教えていただきありがとうございます。試してOKでした。
    2012年7月6日 10:58
  • ごもっともで、どうすればよいかその気になって調べました。

    出力ファイルに

    c:\fxdd\experts\libraries\$(ProjectName).dll

    とかけばOKでした。

    ご教示ありがとうございました。またよろしく。

    2012年7月6日 11:02
  • こんにちは、sige2 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    みなさんから参考になるアドバイスをいただいていているようでしたので、勝手ながら私の方で回答としてマークさせていただきました。
    アドバイスくださったみなさん、ありがとうございます。

    フォーラムでは、いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、sige2 さんもご協力よろしくお願いいたしますね。
    今後とも MSDN フォーラムをよろしくお願いいたします。それでは。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年7月9日 2:02