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

MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい #1361

Closed

Conversation

berryzplus
Copy link
Contributor

@berryzplus berryzplus commented Aug 8, 2020

PR の目的

MinGWビルド向けのMakefileを廃止して、ビルド環境をシンプルにします。

カテゴリ

  • ビルド関連
    • ビルド手順
    • Azure Pipelines
    • AppVeyor
    • GitHub Actions
    • ローカルビルド

PR の背景

PR のメリット

PR のデメリット (トレードオフとかあれば)

  • 変更内容には万全を期していますが、単純ポカミスや誤字脱字等がないとは言い切れません。
  • 変更量が多いのと内容が高度なのとで、すべての変更を説明していません。

仕様・動作説明

  • 現状
    • MinGWビルドはMakefileでビルドしている。
    • Makefileを保守するためにファイルリストを二重管理している。
    • Makefileを保守するためにMSVCビルドには必要のないプログラムMakefileMakeをビルドしている。
    • Makefileによるビルドを実現するために、特殊なバッチsakura\mingw32-del.batを保守している。
    • Makefileによるビルドを実現するために、バッチ内で git bash のパスをPATHから除外している。
    • Makefileによるsakura本体のビルドを実現するために、テストプログラムのビルドが別管理になっている。
  • 変更後
    • MinGWビルドはCMakeで動的にプロジェクトを生成してビルドする。
    • MinGWビルド向けのファイルリストを管理する必要はなくなる。
    • プログラムMakefileMakeは不要になる。
    • 特殊なバッチsakura\mingw32-del.batは不要になる。
    • Makefileによるビルドが必須でなくなるため git bash のパスをPATHから除外する必要はなくなる。
    • ビルド管理がCMakeに一本化される。(相応の知識があればMSVCによるCMakeビルドも可能になる。)

テスト内容

CIビルドが通れば、最低限の確認はできると思います。

PR の影響範囲

  • アプリ(≒サクラエディタ)の機能に影響はありません。
  • Makefile をメンテする必要がなくなります。
  • MinGWのビルド管理がCMakeに一本化されます。
  • テストプログラムから英語リソースにアクセスできるようになります。
  • ビルド関連のドキュメントが少しだけ最新化されます。

関連 issue, PR

参考資料

@AppVeyorBot
Copy link

@k-takata
Copy link
Member

k-takata commented Aug 8, 2020

タイトルを見て、MinGWビルドを完全に廃止してしまうのかと思ったのですが、そうではなくてCMakeに置き換えるということでいいですか?

(相応の知識があればMSVCによるCMakeビルドも可能になる。)

今回のPRは既にMSVCに対応できているのでしょうか。それとも将来的に出来るようになるということでしょうか。

@beru beru added the MinGW MinGW label Aug 8, 2020
@berryzplus
Copy link
Contributor Author

タイトルを見て、MinGWビルドを完全に廃止してしまうのかと思ったのですが、そうではなくてCMakeに置き換えるということでいいですか?

廃止するのは Makefile の保守機構だけです。
Makefile によるビルドを実現するための仕組みが、ビルドをややこしくしているので原因を取り除きます。
MakefileがなくてもMinGWビルドは可能なのでビルド自体は残します。

(相応の知識があればMSVCによるCMakeビルドも可能になる。)

今回のPRは既にMSVCに対応できているのでしょうか。それとも将来的に出来るようになるということでしょうか。

単に ビルドできる という意味ではMSVCにも対応済みです。x64版の依存関係がテキトーなので2回目以降のビルドでビルド済みの依存関係が再ビルドされたりしますが、vs2017/vs2019のWin32/x64でDebug/Releaseともビルド自体は可能です。

MinGW版と同じく、CMakeで生成したバイナリがちゃんと動くかどうかは、別途検証が必要です。

@berryzplus
Copy link
Contributor Author

あかん、tests\build-and-test.bat` でビルド済みを検出できずにリビルドして失敗してる。

@berryzplus
Copy link
Contributor Author

azure pipelines環境で起きるMinGW-GCCの問題に対処しました。

変更前: ローカル用と同じバッチ tests\build-and-test.bat を実行し、ビルドを2回行う。(2回目が失敗する)
変更後: 構成済み&ビルド済みのcmakeプロジェクトで test ターゲットを実行する。

@k-takata
Copy link
Member

k-takata commented Aug 8, 2020

廃止するのは Makefile の保守機構だけです。
Makefile によるビルドを実現するための仕組みが、ビルドをややこしくしているので原因を取り除きます。
MakefileがなくてもMinGWビルドは可能なのでビルド自体は残します。

タイトルや「PR の目的」からは読み取れなかったので、分かるようになってるとよいと思いました。

@berryzplus
Copy link
Contributor Author

タイトルや「PR の目的」からは読み取れなかったので、分かるようになってるとよいと思いました。

ややこしいんですが、説明するとこんな感じです。

目的は、Makefileを廃止してビルド構成を分かりやすくすることです。`CMakeでビルド設定を生成すること‘は手段にすぎないので、Makefileを廃止するメリットやMakefileがあることによるデメリットを中心に説明を書きましt。

目的じゃないので目的のとこには書きませんでした、ということになります。(そんな説明で伝わりますかね・・・

@k-takata
Copy link
Member

k-takata commented Aug 8, 2020

今のタイトルだとMinGW向けのビルドも廃止するように見えるのが問題だと言っています。
「MinGWビルド向けのMakefileを廃止」≠「MinGWビルドを廃止」ということが伝わってきません。(sakuraのビルドシステムに精通している人には自明なことなのかもしれませんが。)

@m-tmatma
Copy link
Member

m-tmatma commented Aug 8, 2020

git clean -dxf した後、ローカルでソリューションビルドしたところ、以下のエラーになりました。

3>START HeaderMake.
3>CMDLINE: ..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_define.h -mode=define
2>Funccode_x.hsrc
3>
3>EXEC : error : Failed to open OutputFile[..\sakura_core\Funccode_define.h] as write mode
3>
3>END HeaderMake.

8848c9e
の処理を入れて確認したところ Permission denied のエラーで失敗していました。

推測ですが、
sakura_core\Funccode_define.h のファイルの書き込みと読み込みが同時に走っているのかもしれません。

以下はオリジナルのエラーすべての引用です。

1>------ Build started: Project: HeaderMake, Configuration: Debug Win32 ------
1>HeaderMake.cpp
1>HeaderMake.vcxproj -> D:\gitwork\SakuraEditor\sakura\sakura-PR\Win32\Debug\HeaderMake.exe
2>------ Build started: Project: sakura, Configuration: Debug Win32 ------
3>------ Build started: Project: sakura_lang_en_US, Configuration: Debug Win32 ------
2>=======================
2>preBuild
2>=======================
2>
2>---- Make githash.h ----
2>find-tools.bat
3>
3>---- Make githash.h ----
3>find-tools.bat
2>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
2>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
2>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
2>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
2>|- CMD_CPPCHECK=
2>|- CMD_DOXYGEN=
2>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
2>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
2>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
2>|- CMD_NINJA=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
2>|- CMD_LEPROC=
2>|- CMD_PYTHON=C:\Windows\py.exe
2>|- CMAKE_G_PARAM=Visual Studio 15 2017
2>end
2>GIT_SHORT_COMMIT_HASH : 30797ae38
2>GIT_COMMIT_HASH       : 30797ae38ba16927315f3fdaee3afe6769b4f718
2>GIT_REMOTE_ORIGIN_URL : https://github.com/m-tmatma/sakura.git
2>GIT_TAG_NAME          :
2>
2>CI_REPO_NAME          :
2>CI_ACCOUNT_NAME             :
2>CI_BUILD_VERSION            :
2>CI_BUILD_NUMBER             :
2>CI_BUILD_URL                :
2>
2>GITHUB_COMMIT_URL           :
2>GITHUB_PR_HEAD_URL          :
2>GITHUB_PR_HEAD_COMMIT       :
2>GITHUB_PR_HEAD_SHORT_COMMIT :
2>
2>APPVEYOR_URL          :
2>APPVEYOR_PROJECT_SLUG :
2>        1 個のファイルを移動しました。
2>..\sakura_core\githash.h was updated.
3>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
3>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
3>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
3>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
3>|- CMD_CPPCHECK=
3>|- CMD_DOXYGEN=
3>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
3>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
3>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
3>|- CMD_NINJA=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
3>|- CMD_LEPROC=
3>|- CMD_PYTHON=C:\Windows\py.exe
3>|- CMAKE_G_PARAM=Visual Studio 15 2017
3>end
3>..\sakura_core\githash.h was not updated.
3>
3>START HeaderMake.
3>CMDLINE: ..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_define.h -mode=define
2>Funccode_x.hsrc
3>
3>EXEC : error : Failed to open OutputFile[..\sakura_core\Funccode_define.h] as write mode
3>
3>END HeaderMake.
3>
3>Funccode_x.hsrc
3>..\sakura_core\Funccode_x.hsrc(590): fatal error C1085: Cannot write compiler generated file: '': Invalid argument
3>D:\gitwork\SakuraEditor\sakura\sakura-PR\sakura\funccode.targets(16,5): error MSB3073: The command "..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_define.h -mode=define" exited with code -1.
3>Done building project "sakura_lang_en_US.vcxproj" -- FAILED.
2>
2>START HeaderMake.
2>CMDLINE: ..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_define.h -mode=define
2>
2>
2>END HeaderMake.
2>
2>Funccode_x.hsrc
2>
2>START HeaderMake.
2>CMDLINE: ..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_enum.h -mode=enum -enum=EFunctionCode
2>
2>
2>END HeaderMake.
2>
2>find-tools.bat
2>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
2>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
2>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
2>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
2>|- CMD_CPPCHECK=
2>|- CMD_DOXYGEN=
2>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
2>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
2>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
2>|- CMD_NINJA=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
2>|- CMD_LEPROC=
2>|- CMD_PYTHON=C:\Windows\py.exe
2>|- CMAKE_G_PARAM=Visual Studio 15 2017
2>end
2>CMake Warning (dev) in CMakeLists.txt:
2>  No project() command is present.  The top-level CMakeLists.txt file must
2>  contain a literal, direct call to the project() command.  Add a line of
2>  code such as
2>
2>    project(ProjectName)
2>
2>  near the top of the file, but after cmake_minimum_required().
2>
2>  CMake is pretending there is a "project(Project)" command on the first
2>  line.
2>This warning is for project developers.  Use -Wno-dev to suppress it.
2>
2>-- The C compiler identification is MSVC 19.16.27042.0
2>-- The CXX compiler identification is MSVC 19.16.27042.0
2>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
2>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
2>-- Detecting C compiler ABI info
2>-- Detecting C compiler ABI info - done
2>-- Detecting C compile features
2>-- Detecting C compile features - done
2>-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
2>-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
2>-- Detecting CXX compiler ABI info
2>-- Detecting CXX compiler ABI info - done
2>-- Detecting CXX compile features
2>-- Detecting CXX compile features - done
2>-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint
2>-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint - done
2>-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint
2>-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint - done
2>-- Checking clayoutint_can_not_be_added_by_clogicint
2>-- Checking clayoutint_can_not_be_added_by_clogicint - done
2>-- Checking clayoutint_can_not_be_subtracted_by_clogicint
2>-- Checking clayoutint_can_not_be_subtracted_by_clogicint - done
2>-- Checking clayoutint_can_not_be_assigned_from_clogicint
2>-- Checking clayoutint_can_not_be_assigned_from_clogicint - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_equal
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_equal - done
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal
2>-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal - done
2>-- Checking clayoutint_can_not_be_assigned_to_int
2>-- Checking clayoutint_can_not_be_assigned_to_int - done
2>-- Configuring done
2>-- Generating done
2>-- Build files have been written to: D:/gitwork/SakuraEditor/sakura/sakura-PR/build/Win32/Debug/CompileTest
2>StdAfx.cpp
2>StdApi.cpp
2>StdControl.cpp
2>CLaxInteger.cpp
2>CMyPoint.cpp
2>CMyRect.cpp
2>CMySize.cpp
2>CMyString.cpp
2>CStrictInteger.cpp
2>CStrictPoint.cpp
2>CStrictRange.cpp
2>CStrictRect.cpp
2>SakuraBasis.cpp
2>CAutoReloadAgent.cpp
2>CAutoSaveAgent.cpp
2>CBackupAgent.cpp
2>CCodeChecker.cpp
2>CDataProfile.cpp
2>CDicMgr.cpp
2>CEditApp.cpp
2>CEol.cpp
2>CFileExt.cpp
2>CGrepAgent.cpp
2>CCesu8.cpp
2>CCodeBase.cpp
2>CCodeFactory.cpp
2>CCodeMediator.cpp
2>CCodePage.cpp
2>CESI.cpp
2>CEuc.cpp
2>charcode.cpp
2>charset.cpp
2>CJis.cpp
2>CLatin1.cpp
2>codechecker.cpp
2>codeutil.cpp
2>CShiftJis.cpp
2>CUnicode.cpp
2>CUnicodeBe.cpp
2>CUtf7.cpp
2>CUtf8.cpp
2>CharsetDetector.cpp
2>CHokanMgr.cpp
2>CKeyWordSetMgr.cpp
2>CLoadAgent.cpp
2>CMarkMgr.cpp
2>CViewCommander.cpp
2>CViewCommander_Bookmark.cpp
2>CViewCommander_Clipboard.cpp
2>CViewCommander_Convert.cpp
2>CViewCommander_Cursor.cpp
2>CViewCommander_CustMenu.cpp
2>CViewCommander_Diff.cpp
2>CViewCommander_Edit.cpp
2>CViewCommander_Edit_advanced.cpp
2>CViewCommander_Edit_word_line.cpp
2>CViewCommander_File.cpp
2>CViewCommander_Grep.cpp
2>CViewCommander_Insert.cpp
2>CViewCommander_Macro.cpp
2>CViewCommander_ModeChange.cpp
2>CViewCommander_Outline.cpp
2>CViewCommander_Search.cpp
2>CViewCommander_Select.cpp
2>CViewCommander_Settings.cpp
2>CViewCommander_Support.cpp
2>CViewCommander_TagJump.cpp
2>CViewCommander_Window.cpp
2>build_config.cpp
2>CConvert.cpp
2>CConvert_HaneisuToZeneisu.cpp
2>CConvert_HankataToZenhira.cpp
2>CConvert_HankataToZenkata.cpp
2>CConvert_SpaceToTab.cpp
2>CConvert_TabToSpace.cpp
2>CConvert_ToHankaku.cpp
2>CConvert_ToLower.cpp
2>CConvert_ToUpper.cpp
2>CConvert_ToZenhira.cpp
2>CConvert_ToZenkata.cpp
2>CConvert_Trim.cpp
2>CConvert_ZeneisuToHaneisu.cpp
2>CConvert_ZenkataToHankata.cpp
2>CDecode_Base64Decode.cpp
2>CDecode_UuDecode.cpp
2>convert_util.cpp
2>convert_util2.cpp
2>COpe.cpp
2>COpeBlk.cpp
2>COpeBuf.cpp
2>CProfile.cpp
2>CPropertyManager.cpp
2>CReadManager.cpp
2>CRegexKeyword.cpp
2>CSaveAgent.cpp
2>CSearchAgent.cpp
2>CSelectLang.cpp
2>CSortedTagJumpList.cpp
2>CWriteManager.cpp
2>CRunningTimer.cpp
2>Debug1.cpp
2>Debug2.cpp
2>Debug3.cpp
2>CDialog.cpp
2>CDlgAbout.cpp
2>CDlgCancel.cpp
2>CDlgCompare.cpp
2>CDlgCtrlCode.cpp
2>CDlgDiff.cpp
2>CDlgExec.cpp
2>CDlgFavorite.cpp
2>CDlgFileUpdateQuery.cpp
2>CDlgFind.cpp
2>CDlgGrep.cpp
2>CDlgGrepReplace.cpp
2>CDlgInput1.cpp
2>CDlgJump.cpp
2>CDlgOpenFile.cpp
2>CDlgOpenFile_CommonFileDialog.cpp
2>CDlgOpenFile_CommonItemDialog.cpp
2>CDlgPluginOption.cpp
2>CDlgPrintSetting.cpp
2>CDlgProfileMgr.cpp
2>CDlgProperty.cpp
2>CDlgReplace.cpp
2>CDlgSetCharSet.cpp
2>CDlgTagJumpList.cpp
2>CDlgTagsMake.cpp
2>CDlgWindowList.cpp
2>CDlgWinSize.cpp
2>CBookmarkManager.cpp
2>CDiffManager.cpp
2>CFuncListManager.cpp
2>CModifyManager.cpp
2>CBlockComment.cpp
2>CDocEditor.cpp
2>CDocFile.cpp
2>CDocFileOperation.cpp
2>CDocListener.cpp
2>CDocLocker.cpp
2>CDocOutline.cpp
2>CDocReader.cpp
2>CDocType.cpp
2>CDocTypeSetting.cpp
2>CDocVisitor.cpp
2>CEditDoc.cpp
2>CLineComment.cpp
2>CLayout.cpp
2>CLayoutMgr.cpp
2>CLayoutMgr_DoLayout.cpp
2>CLayoutMgr_New.cpp
2>CLayoutMgr_New2.cpp
2>CTsvModeInfo.cpp
2>CDocLine.cpp
2>CDocLineMgr.cpp
2>EditInfo.cpp
2>CAppNodeManager.cpp
2>CDocTypeManager.cpp
2>CFileNameManager.cpp
2>CFormatManager.cpp
2>CHelpManager.cpp
2>CommonSetting.cpp
2>CSakuraEnvironment.cpp
2>CSearchKeywordManager.cpp
2>CShareData.cpp
2>CShareData_IO.cpp
2>CTagJumpManager.cpp
2>DLLSHAREDATA.cpp
2>CBregexp.cpp
2>CBregexpDll2.cpp
2>CDllHandler.cpp
2>CHtmlHelp.cpp
2>CIcu4cI18n.cpp
2>CMigemo.cpp
2>CUxTheme.cpp
2>CFuncKeyWnd.cpp
2>CFuncLookup.cpp
2>CKeyBind.cpp
2>Funccode.cpp
2>GrepInfo.cpp
2>CBinaryStream.cpp
2>CFile.cpp
2>CFileLoad.cpp
2>CIoBridge.cpp
2>CStream.cpp
2>CTextStream.cpp
2>CZipFile.cpp
2>CCookieManager.cpp
2>CEditorIfObj.cpp
2>CIfObj.cpp
2>CKeyMacroMgr.cpp
2>CMacro.cpp
2>CMacroFactory.cpp
2>CMacroManagerBase.cpp
2>CPPA.cpp
2>CPPAMacroMgr.cpp
2>CSMacroMgr.cpp
2>CWSH.cpp
2>CWSHIfObj.cpp
2>CWSHManager.cpp
2>CMemory.cpp
2>CNative.cpp
2>CNativeA.cpp
2>CNativeW.cpp
2>CRecycledBuffer.cpp
2>CMyWnd.cpp
2>CDlgFileTree.cpp
2>CDlgFuncList.cpp
2>CFuncInfo.cpp
2>CFuncInfoArr.cpp
2>CWordParse.cpp
2>CDllPlugin.cpp
2>CJackManager.cpp
2>CPlugin.cpp
2>CPluginManager.cpp
2>CWSHPlugin.cpp
2>CPrint.cpp
2>CPrintPreview.cpp
2>CPropComBackup.cpp
2>CPropComCustmenu.cpp
2>CPropComEdit.cpp
2>CPropComFile.cpp
2>CPropComFileName.cpp
2>CPropComFormat.cpp
2>CPropComGeneral.cpp
2>CPropComGrep.cpp
2>CPropComHelper.cpp
2>CPropComKeybind.cpp
2>CPropComKeyword.cpp
2>CPropComMacro.cpp
2>CPropComMainMenu.cpp
2>CPropCommon.cpp
2>CPropComPlugin.cpp
2>CPropComStatusbar.cpp
2>CPropComTab.cpp
2>CPropComToolbar.cpp
2>CPropComWin.cpp
2>CMRUFile.cpp
2>CMRUFolder.cpp
2>CMruListener.cpp
2>CRecent.cpp
2>CRecentCmd.cpp
2>CRecentCurDir.cpp
2>CRecentEditNode.cpp
2>CRecentExceptMru.cpp
2>CRecentExcludeFile.cpp
2>CRecentExcludeFolder.cpp
2>CRecentFile.cpp
2>CRecentFolder.cpp
2>CRecentGrepFile.cpp
2>CRecentGrepFolder.cpp
2>CRecentImp.cpp
2>CRecentReplace.cpp
2>CRecentSearch.cpp
2>CRecentTagjumpKeyword.cpp
2>CDlgKeywordSelect.cpp
2>CDlgSameColor.cpp
2>CDlgTypeAscertain.cpp
2>CDlgTypeList.cpp
2>CImpExpManager.cpp
2>CPropTypes.cpp
2>CPropTypesColor.cpp
2>CPropTypesKeyHelp.cpp
2>CPropTypesRegex.cpp
2>CPropTypesScreen.cpp
2>CPropTypesSupport.cpp
2>CPropTypesWindow.cpp
2>CType.cpp
2>CTypeSupport.cpp
2>CType_Asm.cpp
2>CType_Awk.cpp
2>CType_Basis.cpp
2>CType_Cobol.cpp
2>CType_CorbaIdl.cpp
2>CType_Cpp.cpp
2>CType_Dos.cpp
2>CType_Erlang.cpp
2>CType_Html.cpp
2>CType_Ini.cpp
2>CType_Java.cpp
2>CType_Others.cpp
2>CType_Pascal.cpp
2>CType_Perl.cpp
2>CType_Python.cpp
2>CType_Rich.cpp
2>CType_Sql.cpp
2>CType_Tex.cpp
2>CType_Text.cpp
2>CType_Vb.cpp
2>CGraphics.cpp
2>CImageListMgr.cpp
2>CMenuDrawer.cpp
2>CSoundSet.cpp
2>CVisualProgress.cpp
2>CWaitCursor.cpp
2>file.cpp
2>format.cpp
2>input.cpp
2>MessageBoxF.cpp
2>module.cpp
2>ole_convert.cpp
2>os.cpp
2>relation_tool.cpp
2>shell.cpp
2>string_ex.cpp
2>string_ex2.cpp
2>tchar_convert.cpp
2>tchar_printf.cpp
2>tchar_template.cpp
2>window.cpp
2>CCaret.cpp
2>CEditView.cpp
2>CEditView_Cmdgrep.cpp
2>CEditView_CmdHokan.cpp
2>CEditView_Cmdisrch.cpp
2>CEditView_Command.cpp
2>CEditView_Command_New.cpp
2>CEditView_Diff.cpp
2>CEditView_ExecCmd.cpp
2>CEditView_Ime.cpp
2>CEditView_Mouse.cpp
2>CEditView_Paint.cpp
2>CEditView_Paint_Bracket.cpp
2>CEditView_Scroll.cpp
2>CEditView_Search.cpp
2>CColorStrategy.cpp
2>CColor_Comment.cpp
2>CColor_Found.cpp
2>CColor_Heredoc.cpp
2>CColor_KeywordSet.cpp
2>CColor_Numeric.cpp
2>CColor_Quote.cpp
2>CColor_RegexKeyword.cpp
2>CColor_Url.cpp
2>CRuler.cpp
2>CTextArea.cpp
2>CTextDrawer.cpp
2>CTextMetrics.cpp
2>CViewCalc.cpp
2>CViewFont.cpp
2>CViewParser.cpp
2>CViewSelect.cpp
2>DispPos.cpp
2>CFigureManager.cpp
2>CFigureStrategy.cpp
2>CFigure_Comma.cpp
2>CFigure_CtrlCode.cpp
2>CFigure_Eol.cpp
2>CFigure_HanSpace.cpp
2>CFigure_Tab.cpp
2>CFigure_ZenSpace.cpp
2>CAutoScrollWnd.cpp
2>CEditWnd.cpp
2>CMainStatusBar.cpp
2>CMainToolBar.cpp
2>CSplitBoxWnd.cpp
2>CSplitterWnd.cpp
2>CTabWnd.cpp
2>CTipWnd.cpp
2>CWnd.cpp
2>CAppMode.cpp
2>CCommandLine.cpp
2>CControlProcess.cpp
2>CControlTray.cpp
2>CNormalProcess.cpp
2>CProcess.cpp
2>CProcessFactory.cpp
2>global.cpp
2>WinMain.cpp
2>CClipboard.cpp
2>CDropTarget.cpp
2>sakura.vcxproj -> D:\gitwork\SakuraEditor\sakura\sakura-PR\Win32\Debug\sakura.exe
2>=======================
2>postBuild
2>=======================
2>PLATFORM=Win32
2>CONFIGURATION=Debug
2>..\installer\externals\bregonig\bron420.zip -> Win32\Debug\bregonig.dll
2>..\installer\externals\universal-ctags\ctags-2020-01-12_feffe43a-x86.zip -> Win32\Debug\ctags.exe
4>------ Build started: Project: tests1, Configuration: Debug Win32 ------
4>find-tools.bat
4>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
4>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
4>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
4>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
4>|- CMD_CPPCHECK=
4>|- CMD_DOXYGEN=
4>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
4>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
4>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
4>|- CMD_NINJA=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
4>|- CMD_LEPROC=
4>|- CMD_PYTHON=C:\Windows\py.exe
4>|- CMAKE_G_PARAM=Visual Studio 15 2017
4>end
4>Submodule path '../../../../tests/googletest': checked out '3cf8f514d859d65b7202e51c662a03a92887b8e2'
4>-- The C compiler identification is MSVC 19.16.27042.0
4>-- The CXX compiler identification is MSVC 19.16.27042.0
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
4>-- Detecting C compiler ABI info
4>-- Detecting C compiler ABI info - done
4>-- Detecting C compile features
4>-- Detecting C compile features - done
4>-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
4>-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
4>-- Detecting CXX compiler ABI info
4>-- Detecting CXX compiler ABI info - done
4>-- Detecting CXX compile features
4>-- Detecting CXX compile features - done
4>-- Found PythonInterp: C:/Python38-32/python.exe (found version "3.8.1")
4>-- Looking for pthread.h
4>-- Looking for pthread.h - not found
4>-- Found Threads: TRUE
4>-- Configuring done
4>-- Generating done
4>-- Build files have been written to: D:/gitwork/SakuraEditor/sakura/sakura-PR/build/Win32/Debug/googletest
4>[1/5] Building CXX object googletest\CMakeFiles\gtest_main.dir\src\gtest_main.cc.obj
4>[2/5] Building CXX object googletest\CMakeFiles\gtest.dir\src\gtest-all.cc.obj
4>[3/5] Linking CXX static library lib\gtestd.lib
4>[4/5] Linking CXX static library lib\gtest_maind.lib
4>[4/5] Install the project...
4>-- Install configuration: "Debug"
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/cmake/GTest/GTestTargets.cmake
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/cmake/GTest/GTestTargets-debug.cmake
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/cmake/GTest/GTestConfigVersion.cmake
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/cmake/GTest/GTestConfig.cmake
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-death-test.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-matchers.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-message.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-param-test.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-param-test.h.pump
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-printers.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-spi.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-test-part.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest-typed-test.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest_pred_impl.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/gtest_prod.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/custom
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/custom/gtest-port.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/custom/gtest-printers.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/custom/gtest.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/custom/README.md
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-death-test-internal.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-filepath.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-internal.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-param-util-generated.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-param-util-generated.h.pump
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-param-util.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-port-arch.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-port.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-string.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-type-util.h
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/include/gtest/internal/gtest-type-util.h.pump
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/gtestd.lib
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/gtest_maind.lib
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/pkgconfig/gtest.pc
4>-- Installing: D:/gitwork/SakuraEditor/sakura/sakura-PR/tools/googletest/lib/pkgconfig/gtest_main.pc
4>test-ccommandline.cpp
4>test-cdlgprofilemgr.cpp
4>test-clayoutint.cpp
4>test-cmemory.cpp
4>test-cnative.cpp
4>test-editinfo.cpp
4>test-grepinfo.cpp
4>test-int2dec.cpp
4>test-is_mailaddress.cpp
4>test-loadstring.cpp
4>test-mydevmode.cpp
4>test-parameterized.cpp
4>test-sample-disabled.cpp
4>test-sample.cpp
4>test-ssearchoption.cpp
4>test-StdControl.cpp
4>tests1.vcxproj -> D:\gitwork\SakuraEditor\sakura\sakura-PR\Win32\Debug\tests1.exe
========== Build: 3 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

@m-tmatma
Copy link
Member

m-tmatma commented Aug 8, 2020

上記ログで GIT_REMOTE_ORIGIN_URL が https://github.com/m-tmatma/sakura.git になっていますが、

> git remote -v
origin  https://github.com/m-tmatma/sakura.git (fetch)
origin  https://github.com/m-tmatma/sakura.git (push)
upstream        https://github.com/sakura-editor/sakura.git (fetch)
upstream        https://github.com/sakura-editor/sakura.git (push)

の環境でやっているためです。

@m-tmatma
Copy link
Member

m-tmatma commented Aug 8, 2020

今のタイトルだとMinGW向けのビルドも廃止するように見えるのが問題だと言っています。
「MinGWビルド向けのMakefileを廃止」≠「MinGWビルドを廃止」ということが伝わってきません。(sakuraのビルドシステムに精通している人には自明なことなのかもしれませんが。)

私は sakura のビルドシステムをある程度分かっているので、なんとなくタイトルでやりたいことは伝わりましたが、
前提知識がないとわからないと思います。

目的は、Makefileを廃止してビルド構成を分かりやすくすることです。`CMakeでビルド設定を生成すること‘は手段にすぎないので、Makefileを廃止するメリットやMakefileがあることによるデメリットを中心に説明を書きましt。

MinGWビルド用に Makefile を生成するのをやめて、CMakeでビルドする でいいように思います。

目的じゃないので目的のとこには書きませんでした、ということになります。(そんな説明で伝わりますかね・・・

MinGWビルド (MSVC 側にも影響する) をシンプルにするという要求があって
Makefile を生成するのをやめてCMakeでビルドするという実現方法がある

という流れですが、

MinGWビルド用に Makefile を生成する
という現状を知っていないと、なんのことかわからないので、
目的と手段の両方をタイトルに含めたらいいんではないかと思います。

@berryzplus berryzplus changed the title MinGWビルド向けのMakefileを廃止したい MinGWビルドにMakefileを使うのをやめてビルドをシンプルにしたい Aug 9, 2020
@berryzplus
Copy link
Contributor Author

Funccode_define.hのPermission deniedエラーは、手元環境では再現しないのでなんとも言えないです。

Permission deniedの原因は、ファイルをロックするアプリ(≒サクラエディタ・秀丸等)で開いてるのを忘れていた、であることが多いです。

@berryzplus berryzplus changed the title MinGWビルドにMakefileを使うのをやめてビルドをシンプルにしたい MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい Aug 9, 2020
@berryzplus
Copy link
Contributor Author

できるだけ分かりやすくなるようにタイトルを書き換えてみました。

- 本体 テスト その他
変更前MinGW Makefile CMake MakefileはMSVC版のビルドに組み込まれたMakefileMakeを活用して、手でメンテしていた。後付けしたテストビルドの部分が独立したCMakeプロジェクトになっていた。
変更後MinGW CMake CMake 本体ビルドをテストビルドに統合して、全体で1つのCMakeプロジェクトにした。

@m-tmatma
Copy link
Member

Funccode_define.hのPermission deniedエラーは、手元環境では再現しないのでなんとも言えないです。

Permission deniedの原因は、ファイルをロックするアプリ(≒サクラエディタ・秀丸等)で開いてるのを忘れていた、であることが多いです。

アプリは何も開いてません。(TortoiseGit はインストールしていますが、インストールされているだけで何も操作はしていません)

master (d3a1a8e) で試したところ 10 回やって、まったく発生しませんでした。
この PR (30797ae) では 10 回試して、6 回発生しました。

手順は

  1. Visual Studio 2017 を閉じる
  2. git clean -dxf を実行する
  3. もう一度 git clean -dxf を実行する
  4. sakura.sln をダブルクリックして開く
  5. ソリューションのビルドを行う

@berryzplus
Copy link
Contributor Author

コマンドラインで git clean -dxf って叩いたことあまりないんですが、TortoiseGitの Clean up コマンドで発行されるコマンドと同等のようでした。

ただ、やっぱり再現しないので心当たりを共有しときます。

ローカルの .git/info/exclude の内容

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.vs
Debug*
Release*
*.aps
*.db
*.opendb
*.dll
*.exe
*.exp
*.idb
*.ilk
*.ini
*.lib
*.ncb
*.obj
*.opt
*.pch
*.pdb
*.plg
*.res
*.sdf
*.opensdf
*.suo
*.tds
*.user
*.o
cvs
svnrev.h
tools/googletest

ここを空にしても再現しなかったので検証はできてないんですが、/.gitignore には漏れがあると思っていてローカルでは更新される可能性のあるファイルすべてを削除対象にしています。

ファイルの書き込みアクセスが失敗する障害の調査は、一般的にはリソースモニターを利用して行います。
https://www.wannko.net/windows10/app/resorcecmd.html
https://www.atmarkit.co.jp/ait/articles/0910/02/news099.html

@berryzplus berryzplus changed the title MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい [WIP] MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい Aug 13, 2020
@berryzplus
Copy link
Contributor Author

#1363 で MinGW版テストの実行方法を変えたのを反映したいので一旦WIPにします。

access deniedの件と/.gitignoreの件も、可能なら対応しようと思います。

ビルドが2回走る対策としてCMake化したが、障害発生時にエラーが出力されないのはツラいのでバッチに戻す。
@berryzplus
Copy link
Contributor Author

う~む、これは分からんです。

3>START HeaderMake.
3>CMDLINE: ..\Win32\Debug\HeaderMake.exe -in=..\sakura_core\Funccode_x.hsrc -out=..\sakura_core\Funccode_define.h -mode=define
2>Funccode_x.hsrc
3>
3>EXEC : error : Failed to open OutputFile[..\sakura_core\Funccode_define.h] as write mode
3>
3>END HeaderMake.

ログからすると、..\sakura_core\Funccode_define.h を書き込みアクセスで開きにいってエラーになってます。

エラー発生時の追加調査から、エラー原因が access denied だと分かっているわけですが、それが発生する状況は2つです。

  1. 他のプロセスがそのファイルをロックしている(排他のreadで開いてる or 単に write で開いてる)
  2. 対象のフォルダが存在しない(対象フォルダはソースフォルダなのでありえない)。

git clean -dxf した後、ローカルでソリューションビルドしたところ、以下のエラーになりました。

という話なので、sakura.sln を開いてビルドしていると思います。
あとのコメントで手順に sakura.sln を開く とあるので間違いないですね・・・。
だとするとエラーが発生したビルドステップは、以下のターゲット定義に基づいて起動されています。

<Target Name="FuncCodeDefine" BeforeTargets="ResourceCompile" AfterTargets="GitHash"
Inputs="@(FuncCodeRes)"
Outputs="$(FuncCodeDefine)">
<Exec Command="$(HeaderMake) -in=@(FuncCodeRes) -out=$(FuncCodeDefine) -mode=define" />
</Target>

こいつの呼出し階層はこうなっています。

  • sakura.sln
    • sakura/sakura.vcxproj
      • sakura/funccode.targets

一応、今回PRの修正で周辺をいじってはいるんですけど、直接的な関係はなさそうに見えます。
https://github.com/sakura-editor/sakura/pull/1361/files#diff-e88014749f0ef5e8802b57d8f11807a1L1018-L1020

ということで、問題があるとしたら元からじゃね? という結論で access denied への対策は打てませんでした・・・。

@berryzplus berryzplus changed the title [WIP] MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい Aug 13, 2020
@berryzplus berryzplus changed the title MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい [WIP] (凍結中)MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい Aug 13, 2020
@m-tmatma m-tmatma marked this pull request as draft August 20, 2020 13:24
@berryzplus
Copy link
Contributor Author

berryzplus commented Aug 25, 2020

#1375 を見て、逆方向の統一を図るのもアリかな?と思いました。
つまり、tests1.exe の Makefile を作る です・・・。

問題は以下の点だと思っています。

  1. MinGW向けにファイルリストを二重管理している。(自動生成なら管理が不要。)
  2. MinGW向けの Makefile 更新を MSVC ビルドで実行させている。(MSVC的には無駄。)
  3. なんかスマートじゃない自前バッチ sakura/mingw32-del.bat が嫌。(注:作ったのぼくです。)
  4. バッチ内で git bash のパスをPATHから除外している。(MinGWビルドシステムの改善 #1375 で解決済み)

Makefileの自動生成とCMake導入を切り離せば、Makefileの最新化にはうまい手がありそうに思います。

@m-tmatma
Copy link
Member

python でビルド用のファイルを作成 (更新ではない)する様にするのはいかがですか?

それでこの際、makefileを生成するのではなく、ninja build 用のファイルを作成するのではどうでしょうか?

別に makefile でもいいんですが、新しく generator を作るのならmakefileに拘らなくていいので、makefile より速いninjaの方がいいかなと思います。

@m-tmatma
Copy link
Member

補足

更新とせずに作成とする理由はソースファイルを、追加するときに一旦ビルドしてからコミットする手間が煩わしいからです。

@k-takata
Copy link
Member

MinGW の Makefile には、VC++ と同じように、オブジェクトファイルや実行ファイルを別ディレクトリに出力したいという要望もあります。

@berryzplus
Copy link
Contributor Author

学習ネタっす。

うん、やっぱり出来る!
CMakeLists.txt で アスタ指定 で実現できてるものが、Makefileで実現できないわけがない!

という論調で進めていくと、まさかの Makefile の更新を不要にする という明後日の方向に向かう余地が出てくるわけです・・・(暴走

@berryzplus
Copy link
Contributor Author

MinGW の Makefile には、VC++ と同じように、オブジェクトファイルや実行ファイルを別ディレクトリに出力したいという要望もあります。

オブジェクトファイルの定義の前に $(IntDir) を書くようにしたらやれそうですね。

そのためには MakefileMake の抹殺が不可欠! (MakefileMakeが嫌なわけではないっす。

@berryzplus
Copy link
Contributor Author

python でビルド用のファイルを作成 (更新ではない)する様にするのはいかがですか?

それでこの際、makefileを生成するのではなく、ninja build 用のファイルを作成するのではどうでしょうか?

Makefile生成なら、ありものを活用したいのでCMake採用の流れにしたいです。

あえてMakefile側に統一させようとする意図は、Makefileのままでも既存機能を活用すればもっとスマートなビルド環境を作れる余地があると気付いたからです。ざっくり言うと「もっとMakefileを使いこなしてからCMakeに移行しても遅くはない気がしてきた」ってことです。

generatorの作成は・・・大変そうなので、やるならCMakeのgeneratorを流用したいです。

@k-takata
Copy link
Member

$(wildcard)VPATH を駆使すれば何か上手い感じに出来そうな気がしてきました。

@berryzplus
Copy link
Contributor Author

$(wildcard)VPATH を駆使すれば何か上手い感じに出来そうな気がしてきました。

ふ~む、Makefileって深い・・・。

https://qiita.com/chibi929/items/b8c5f36434d5d3fbfa4a
https://www.ecoop.net/coop/translated/GNUMake3.77/make_4.jp.html

@k-takata
Copy link
Member

何かそれっぽいものが出来た気がします。#1383

@k-takata k-takata added the environment 環境関連全般【ChangeLog除外】 label Aug 26, 2020
@berryzplus berryzplus changed the title [WIP] (凍結中)MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい MinGWビルドのMakefileをCMakeによる自動生成に置き換えてビルドをシンプルにしたい Aug 29, 2020
@berryzplus
Copy link
Contributor Author

CMakeに移行しないとできないと思っていたことが、Makefileのリファクタリングで実現できそうだと分かったのでこのPRは一旦閉じてしまいます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
environment 環境関連全般【ChangeLog除外】 MinGW MinGW
Projects
None yet
Development

Successfully merging this pull request may close these issues.

cmake 対応 ビルド要件のドキュメントが古くなっている
5 participants