6

Visual Studio 2012 C++/CLI で yacc と lex を使用しており、以下の画像に示すように yacc ソース ファイルのカスタム ビルド ステップを作成しました。

カスタム ビルド プロパティ ページ

出力ファイルには 2 つの依存関係があります。これらは、yacc ソース ファイル icl5kyacc.y と yyparse.c テンプレート ファイルです。ソリューションをビルドするたびに、yyparse.c および icl5kyacc.y ソース ファイルが変更されていない場合でも、カスタム ビルド ステップが実行されます。ビルド後のディレクトリ一覧は次のとおりです。

  21-Sep-2012  10:19:18p         28,210    A icl5kyacc.y
  17-Sep-2012   7:32:06p          9,042    A yyparse.c
  22-Sep-2012  11:43:56a         38,233    A ICL5KYACC.cpp
  22-Sep-2012  11:43:56a          2,160    A icl5kyacc.h

そして、再びビルドした後

2> icl5kyacc.y から icl5kyacc.cpp を生成する

  21-Sep-2012  10:19:18p         28,210    A icl5kyacc.y
  17-Sep-2012   7:32:06p          9,042    A yyparse.c
  22-Sep-2012  11:45:46a         38,233    A ICL5KYACC.cpp
  22-Sep-2012  11:45:46a          2,160    A icl5kyacc.h

カスタム ビルド ステップを使用すると、ビルド ステップの入力ファイルと出力ファイルの間に標準の依存関係ルールが自動的に適用されると考えるのは間違っていますか? 私が興味を持っていることの 1 つは、%(AdditionalInputs)マクロです。このマクロは、Studio が [追加の依存関係] の下に配置してくれました。それが何であるか、または変更中のファイルを何らかの形で指している場合はわかりません。

4

2 に答える 2

4

出力ファイルが実際に指定した場所にあることを確認しますか?

リストを見ると、入力がリストされています%(Directory)yyparse.c(これには、.yファイルも含まれている必要があります)。あなたの出力もとにあるべきではありません、あなたのリストがそれらが同じディレクトリにあることを示しているように見えるのを見てください%(Directory)icl5kyacc.h%(Directory)ICL5KYACC.cpp

出力ファイルが見つからない場合、または出力ファイルが入力ファイルよりも古い場合、ビルドタスクは再実行されます。出力ファイルへのパスが間違っている場合、ツールはそれらを検出せず、ビルドタスクを再度実行する必要があると想定します。

于 2012-09-25T09:42:40.993 に答える
4

問題は、%(Directory) がソリューションの親からプロジェクト ディレクトリ "ICL5K\ICL5K\" への相対パスであり、ビルド中に現在のディレクトリが既にプロジェクト ディレクトリになっていることでした。そのため、yyparse.c 依存ファイルは C:\ICL5K\ICL5K\ICL5K\ICL5K で検索されていました。ドライブ指定子「C:\ICL5K\ICL5K\」を含むルートからのフル パスである $(ProjectDir) を使用する必要がありました。画像はこちら しかし、さらに良いのは、すべての入力ファイルと出力ファイルがプロジェクト ディレクトリにあり、それが既に現在のデフォルト ディレクトリであることに気付き、以下に示すようにすべてのディレクトリ マクロを削除する ことです。カスタム ビルド ステップは icl5kyacc.y のプロパティであるため、ファイルは既に依存として含まれています。

于 2012-09-25T17:24:18.833 に答える