[C++] 220 Visual C++ : 非IDE開発環境 その4 アプリアイコン設定

[Windows11, Visual C++2017, FLTK 1.3.8, GNU Make 3.81, NO IDE]

アプリアイコンはMakefileのリンク時のオプションとしてresファイルを入れておけば埋め込まれます。

resファイルはVisual Studioプロジェクトのリソースファイルとしてicoファイルを登録するとビルド時に自動生成します。今回は自製せずにこちらを流用しました。

# コンパイラ設定他
COMPILER = cl
DEBUG = /D "_DEBUG"
CONSOLE = /D "_CONSOLE"
LINKER = LINK
RESOURCE = "D:\code\VC++\Projects\ColorSampleJP\images\ColorSampleJP.res"

<中略>

# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(LINKER) $(LIBRARY_l) $(LIBRARY_L) $(OBJS) $(LDFLAGS) $(RESOURCE) 
	rename btnAction.exe $(TARGET)
	move $(TARGET) $(TARGETDIR) >nul

[C++] 219 Visual C++ : 非IDE開発環境 その3 アプリMakefile作成

[Windows11, Visual C++2017, FLTK 1.3.8, GNU Make 3.81, NO IDE]

カラーアプリのMakefileを作成しました。

やはりGNU MakeはVisual C++では思うように動いてくれません。挙動のおかしなところはMakefile内でつじつまを合わせています。Windows純正のNMAKEを使う方が良さそうです。

プロジェクトディレクトリのサイズは18MBですからVisual Studio版1.51GBの80分の1になりました。ヘッダファイルとcppファイルを別ディレクトリに分離しているのでアクセス性も高いです。

128GBや256GBなどストレージの小さなWindowsPCを使用しているプログラマにおすすめの開発環境です。私のPCはcドライブ512GB、dドライブ2TBですが、それでもプロジェクトのサイズは看過できませんでしたね。

これでいらだちも収まり、良い心持ちでプログラミングできそうです。

# コンパイラ設定他
COMPILER = cl
DEBUG = /D "_DEBUG"
CONSOLE = /D "_CONSOLE"
LINKER = LINK

# オプション設定
CPPFLAGS = /std:c++17 /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl  /Zc:inline /fp:precise /D "_UNICODE" \
/errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /FC /c /diagnostics:column /EHsc
LDFLAGS = 

# includeパス(-I)
INCLUDE = /I"C:\packages\fltk-1.3.8\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\atlmfc\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\ucrt" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\winrt" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\cppwinrt" \
/I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um" \
/I"D:\code\VC++\Projects\ColorSampleJP\include" \
/I"D:\code\VC++\Projects\ColorConvert\ColorConvert" \
/I"D:\code\VC++\Projects\Split\Split" \
/I"D:\code\VC++\mylib_vc\include"

# ライブラリ(-l)
LIBRARY_l = /DYNAMICBASE "fltkd.lib" "wsock32.lib" "comctl32.lib" "fltk_jpegd.lib" \
"fltk_imagesd.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" \
"comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" \
"uuid.lib" "odbc32.lib" "odbccp32.lib" \
"CharExtract.lib" "Funcs.lib" "ColorConvert.lib" "Split.lib"

# ライブラリパス(-L)
LIBRARY_L = /LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\ATLMFC\lib\x64" \
/LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\lib\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" \
/LIBPATH:"C:\packages\fltk-1.3.8\lib\Debug" \
/LIBPATH:"D:\code\VC++\Projects\ColorConvert\x64\Debug" \
/LIBPATH:"D:\code\VC++\Projects\Split\x64\Debug" \
/LIBPATH:"D:\code\VC++\mylib_vc\lib"

# ソースファイル
SRCDIR = .\src
SRCS = $(SRCDIR)\btnAction.cpp $(SRCDIR)\FileChooser.cpp $(SRCDIR)\FileChooser2.cpp $(SRCDIR)\main.cpp \
$(SRCDIR)\modalDialog.cpp $(SRCDIR)\searchLocation.cpp $(SRCDIR)\csvProcessChar.cpp

# オブジェクトファイル
OBJDIR = .\obj
OBJS = $(OBJDIR)\btnAction.obj $(OBJDIR)\FileChooser.obj $(OBJDIR)\FileChooser2.obj $(OBJDIR)\main.obj \
$(OBJDIR)\modalDialog.obj $(OBJDIR)\searchLocation.obj $(OBJDIR)\csvProcessChar.obj

# 実行ファイル
TARGETDIR = .\bin
TARGET = ColorSampleJP.exe

# cppファイルからoファイル作成 $<:依存ファイル
$(OBJDIR)\btnAction.obj: $(SRCDIR)\btnAction.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move btnAction.obj $(OBJDIR) >nul

$(OBJDIR)\FileChooser.obj: $(SRCDIR)\FileChooser.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move FileChooser.obj $(OBJDIR) >nul

$(OBJDIR)\FileChooser2.obj: $(SRCDIR)\FileChooser2.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move FileChooser2.obj $(OBJDIR) >nul

$(OBJDIR)\main.obj: $(SRCDIR)\main.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move main.obj $(OBJDIR) >nul

$(OBJDIR)\modalDialog.obj: $(SRCDIR)\modalDialog.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move modalDialog.obj $(OBJDIR) >nul

$(OBJDIR)\searchLocation.obj: $(SRCDIR)\searchLocation.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move searchLocation.obj $(OBJDIR) >nul

$(OBJDIR)\csvProcessChar.obj: $(SRCDIR)\csvProcessChar.cpp
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<
	move csvProcessChar.obj $(OBJDIR) >nul

# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(LINKER) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS) $(OBJS)
	rename btnAction.exe $(TARGET)
	move $(TARGET) $(TARGETDIR) >nul

# ビルド
.PHONY:all
all: clean $(TARGET)

# ファイル削除
.PHONY:clean
clean:
	del /Q $(TARGET) $(OBJS) vc140.idb vc140.pdb

[C++] 218 Visual C++ : 非IDE開発環境 その2 Makefile作成

[Windows11, Visual C++2017, FLTK 1.3.8, GNU Make 3.81, NO IDE]

MakefileをGNU Makeで作成しました。WindowsにはNMAKEという同種のコマンドがあるようです。

GNU Makeはコマンドプロンプトの文字コードをUTF-8にしても何故か文字化けのままです。

# コンパイラ設定他
COMPILER = cl
DEBUG = /D "_DEBUG"
CONSOLE = /D "_CONSOLE"
LINKER = LINK

# オプション設定
CPPFLAGS = /std:c++17 /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl  /Zc:inline /fp:precise /D "_UNICODE" \
/errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /FC /c /diagnostics:column
LDFLAGS = 

# includeパス(-I)
INCLUDE = /I"C:\packages\fltk-1.3.8\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\atlmfc\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include" \
/I"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\ucrt" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\winrt" \
/I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\cppwinrt" \
/I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um"

# ライブラリ(-l)
LIBRARY_l = /DYNAMICBASE "fltkd.lib" "wsock32.lib" "comctl32.lib" "fltk_jpegd.lib" \
"fltk_imagesd.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" \
"comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" \
"uuid.lib" "odbc32.lib" "odbccp32.lib"

# ライブラリパス(-L)
LIBRARY_L = /LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\ATLMFC\lib\x64" \
/LIBPATH:"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\lib\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" \
/LIBPATH:"C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" \
/LIBPATH:"C:\packages\fltk-1.3.8\lib\Debug"

# ソースファイル
SRCDIR = 
SRCS = test.cpp

# オブジェクトファイル
OBJDIR = 
OBJS = test.obj

# 実行ファイル
TARGETDIR = 
TARGET = test.exe

# cppファイルからoファイル作成 $<:依存ファイル
$(OBJS): $(SRCS)
	$(COMPILER) $(CPPFLAGS) $(DEBUG) $(CONSOLE) $(INCLUDE) $<

# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(LINKER) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS) $(OBJS)

# ビルド
.PHONY:all
all: clean $(TARGET)

# ファイル削除
.PHONY:clean
clean:
	del /Q $(TARGET) $(OBJS) vc140.idb vc140.pdb