Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

クリーン時に成果物が削除されるようにする #858

Merged

Conversation

berryzplus
Copy link
Contributor

目的

クリーン時に、bregonig.dllとtags.exeが出力フォルダに残るので消すようにする。

対処内容

MsBuildがクリーン時に参照する削除ファイルリストにファイル名を追加し、
カスタムビルドの成果物がクリーン対象になるようにする。

$(IntDir)と$(OutDir)に出力するファイルは、同様にクリーン対象に含めることができるので、今後カスタムビルド成果物を増やした場合に枠組みを流用することができる。

確認方法

  1. PR適用前のブランチ(master等)を fetch してビルドし、Win32/$(Configuration) にビルド成果物が生成されるのを確認する。
  2. Cleanを実行してWin32/$(Configuration)を確認する。bregonig.dllが削除されず残っている
  3. この PR のブランチを fetch してビルドし、Win32/$(Configuration) にビルド成果物が生成されるのを確認する。
  4. Cleanを実行してWin32/$(Configuration)を確認する。フォルダは空になる
  5. 再度ビルドを実行して、Win32/$(Configuration) にビルド成果物が生成されるのを確認する。

関連する課題

他のパスに出力する生成ファイル(githash.hやfunccode_enum.h等) はこの方法では削除できないので別の手を考える必要がある。

ファイルが残る原因は、現状のカスタムタスクが「ビルドステップの一部」ではなく「単なるバッチ処理」として書かれているために、MsBuildから見て生成ファイルを「出力ファイル」と認識できないことにある。本来は「出力ファイルがあるカスタムタスク」に書き換えていく試みが必要と考えられる。

この PR では、本当に必要な対処に目をつぶり、当座の「クリーンしたけどファイルが消えない」を解消するだけの単純対処を提供する。

MsBuildがクリーン時に参照する削除ファイルリストにファイル名を追加し、
カスタム成果物がクリーン対象になるようにする。
$(IntDir)と$(OutDir)に出力するファイルは、クリーン対象に含めることができる。
他のパスに出力する生成ファイルはこの方法では削除できないので別の手を考える必要がある。
@m-tmatma m-tmatma added this to the v2.4.0 milestone Apr 20, 2019
@m-tmatma
Copy link
Member

確認方法

の通りになるのを確認しました。

@m-tmatma
Copy link
Member

この PR を対応するのにあたって、どういう資料を参照しましたか?

@berryzplus
Copy link
Contributor Author

この PR を対応するのにあたって、どういう資料を参照しましたか?

ググって出てきた資料+MsBuildタスクのソースコードです。

stackoverflowとかmsdn magazineとか見た気がするので、参照したと思われるリンクを貼っておきます。

https://stackoverflow.com/questions/3497375/msbuild-adding-files-to-be-cleaned-in-a-build
https://msdn.microsoft.com/en-us/magazine/dd419659.aspx (Extending the Clean Processの項にちらっとかいてある)
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/how-to-clean-a-build?view=vs-2019

なんか、.NET系のgithub issueで直接的な例示を見た気もするんですけど、見つかりませんでした 😭

@m-tmatma
Copy link
Member

なんか、.NET系のgithub issueで直接的な例示を見た気もするんですけど、見つかりませんでした 😭

https://github.com/search?q=extension%3Avcxproj+CoreClean
で検索してみたのですが、

https://github.com/HEZBON/demo2/blob/8954fb0169eb8321749d2c5e68f7aa66c780f6e4/Desktop/python.py/Python-3.6.5/PCbuild/_freeze_importlib.vcxproj#L113-L118
とか見ると単に消したいファイル並べるだけでいいんじゃないかな? という気がします。
試してませんが。

参考: https://help.github.com/en/articles/searching-code#search-by-file-extension

@berryzplus
Copy link
Contributor Author

  <Target Name="_CleanImportLib" BeforeTargets="CoreClean"> 
     <ItemGroup> 
       <Clean Include="$(IntDir)importlib.g.h" /> 
       <Clean Include="$(IntDir)importlib_external.g.h" /> 
     </ItemGroup> 
   </Target> 

まぁ、好みの問題ですね。

Cleanというタスクがあるなら
Cleanノードでファイルを指定すれば
Cleanタスクの対象になると考えるのは自然です。
たぶん、これでも動くんじゃないかと思います。

このPRで削除対象をマークするノード名はDeleteOnCleanとしています。
クリーン時に削除するファイルだということが分かるようにそうしています。

定義したリストを、$(CleanFile)なる変数が指すファイルに書きこんでいます。
CoreCleanの前のタイミングで、DeleteOnCleanを書き込む構成になっています。

記述量が少ないことは、たいていの場合「いいこと」ですが、DeleteOnCleanのほうが内容を把握しやすい良い記述であるように思います。

@m-tmatma
Copy link
Member

記述量が少ないことは、たいていの場合「いいこと」ですが、DeleteOnCleanのほうが内容を把握しやすい良い記述であるように思います。

他でも使ってる方法でいけるのであれば、そのほうがいいと思いますし、
シンプルなほうがいいと思います。
いまいちこの PR の方法の利点がわかりません。

Copy link
Member

@m-tmatma m-tmatma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

対応ありがとうございます。

@berryzplus
Copy link
Contributor Author

記述量が少ないことは、たいていの場合「いいこと」ですが、DeleteOnCleanのほうが内容を把握しやすい良い記述であるように思います。

他でも使ってる方法でいけるのであれば、そのほうがいいと思いますし、
シンプルなほうがいいと思います。
いまいちこの PR の方法の利点がわかりません。

<Clean include="path/to/file" /> の記述が分かりにくいこと以外に特段デメリットもなさそうなので、Clean を使うように変更しました。

@m-tmatma
Copy link
Member

おや? マージしないんですか?

@berryzplus
Copy link
Contributor Author

レビューありがとうございます。
マージしちゃいます。

@berryzplus berryzplus merged commit a7b577e into sakura-editor:master Apr 23, 2019
@berryzplus berryzplus deleted the feature/append_clean_targets branch April 28, 2019 06:20
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
…lean_targets

クリーン時に成果物が削除されるようにする
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants