danpapa blog

趣味のプログラミング等について

VSCode + wxWidgets

開発環境の構築中

さて、今回もお気に入りのVSCode + wxWidgetsについてです。
前回はVSCodeでビルドは出来た。ってとこでした。今回は以前制作したCCh(バッテリーの充電制御)アプリ、
danpapa-hry.hateblo.jp

これを移植中ですが、問題が出てくる出てくるw

今回はアイコンの表示についてです。
簡単に言えば、どうやってビルドするのか?ってことですね。

はい、CMakelLists.txtは下記です。(詳細は省きますよーw)

# //////////////////////////////////////////////////////////
set(PROJNAME "test")
set(MINGW "C:/CodeBlocks/MinGW/64bit/bin")
set(WX_WIDGETS_DIR "C:/CodeBlocks/Library/wxWidgets/64bit")
set(USE_RESOURCE 1) #0:NON 1:USE(resource.rc)
# //////////////////////////////////////////////////////////

if ("${USE_RESOURCE}" STREQUAL 1)
    set(RESOURCE ${CMAKE_SOURCE_DIR}/resource.rc)
    set(RESOURCE_OBJ "${CMAKE_CURRENT_BINARY_DIR}/resource.rc.obj")
    set(CMAKE_RC_COMPILER ${MINGW}//windres.exe)

    add_custom_command(OUTPUT "${RESOURCE_OBJ}"
        COMMAND ${CMAKE_RC_COMPILER}
            -D GCC_WINDRES
            -I ${WX_WIDGETS_DIR}/include
            -I ${WX_WIDGETS_DIR}/lib/gcc_lib/mswu
            -I C:/CodeBlocks/MinGW/64bit/include
            -J rc
            -O coff
            -i ${RESOURCE}
            -o ${RESOURCE_OBJ})
endif()

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    set(PROJNAME "${PROJNAME}-Debug")
else()
    set(PROJNAME "${PROJNAME}-Release")
endif()

cmake_minimum_required(VERSION 3.0.0)
project(${PROJNAME} VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "-pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "-g -D__WXDEBUG__")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Og -g")

include_directories(${CMAKE_SOURCE_DIR})
include_directories(${WX_WIDGETS_DIR}/include)
include_directories(${WX_WIDGETS_DIR}/lib/gcc_lib/mswu)
link_directories(${WX_WIDGETS_DIR}/lib/gcc_lib)

file(GLOB SOURCE_CODE "*.cpp")
add_executable(${PROJNAME} WIN32 ${SOURCE_CODE} ${RESOURCE_OBJ})

target_include_directories(
    ${PROJNAME}
    PUBLIC
    ${WX_WIDGETS_DIR}/include
)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    target_link_libraries(
        ${PROJNAME}
        PUBLIC
        wxmsw31ud
        wxpngd
        wxjpegd
        wxtiffd
        wxzlibd
        # wxexpatd
        # wxmsw31ud_gl
        # wxregexud
        # wxscintillad
    )
else()
    target_link_libraries(
        ${PROJNAME}
        PUBLIC
        wxmsw31u
        wxpng
        wxjpeg
        wxtiff
        wxzlib
        # wxexpat
        # wxmsw31u_gl
        # wxregexu
        # wxscintilla
    )
endif()

target_link_libraries(
    ${PROJNAME}
    PUBLIC
    kernel32
    user32
    gdi32
    winspool
    comdlg32
    advapi32
    shell32
    ole32
    oleaut32
    uuid
    comctl32
    wsock32
    odbc32
    shlwapi
    version
    uxtheme
    oleacc
)

まぁ、適当です。
アイコンファイルはobjファイルにしてからCPPファイルと一緒にビルドするって感じでしょうか?

f:id:danpapa_hry:20200126204033p:plain:w300

これで、アプリのアイコンやタスクトレイのアイコンもOKみたいですね。

あ、参考までに開発環境を書いておきます(32bit環境は省略)
Visual Studio Code(1.41.1) + (拡張)CMake + (拡張)CMake Tools
MinGW (x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0)
wxWidgets 3.1.2 CMake&ビルドは下記
 mingw32-make -j4 -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 MONOLITHIC=1
 mingw32-make -j4 -f makefile.gcc BUILD=debug UNICODE=1 SHARED=0 MONOLITHIC=1
こんなとこでしょうか。

あ、VSCodeの設定は下記です。
(.vscodeの中身、debugやintellisenseで必要かと。。。)
<c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/CodeBlocks/Library/wxWidgets/64bit/include",
                "C:/CodeBlocks/Library/wxWidgets/64bit/lib/gcc_lib/mswu"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:\\0000_APPS\\CodeBlocks\\MinGW\\64bit\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

<launch.json

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            // "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\0000_APPS\\CodeBlocks\\MinGW\\64bit\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "gcc.exe build active file"
        }
    ]
}

<launch.json

{
    "tasks": [
        {
            "type": "shell",
            "label": "gcc.exe build active file",
            "command": "D:\\0000_APPS\\CodeBlocks\\MinGW\\64bit\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:\\0000_APPS\\CodeBlocks\\MinGW\\64bit\\bin"
            }
        }
    ],
    "version": "2.0.0"
}

まぁ、すべて理解してるわけではないので、説明は出来ませんw
質問されも答えられないと思いますが、コメントはモチベーションに繋がるので、有難く感じます。

さぁ、これで大部分の問題はクリア出来たと感じています。(CodeBlocks → VSCode+wxWidgetsの移行に関して)
まぁ、細かいところはそのうち誰かが解決してくれるでしょう?w

この設定での操作方法
・ビルド&実行    Shift+F5
・ビルド&debug    F5
・クリーン      Ctrl+Shift+P CMake:クリーン

んー、こんなとこでしょうか?
雑な記事ですが、何かの参考になれば・・・

あ!次の旅はまだまだ時間がかかりそうですw
C#の開発環境やJavaの開発環境もVSCodeで検討したいのでw