2024/03/18(月) [n年前の日記]
#2 [prog] 1つのMakefileでWindowsとLinuxに対応させたい
1つのMakefileで、Windows と Linux の両方に対応させたい。どうしたらいいのだろう。
以下が参考になった。ありがたや。
_【make】Makefile内の記述をWindowsとLinux両対応にする│株式会社シーポイントラボ|浜松のシステム・RTK-GNSS開発
一例。以下のように書いたら動いてくれた。
以下が参考になった。ありがたや。
_【make】Makefile内の記述をWindowsとLinux両対応にする│株式会社シーポイントラボ|浜松のシステム・RTK-GNSS開発
ifeq ($(OS),Windows_NT) # Windows else # Linux #endif
一例。以下のように書いたら動いてくれた。
SRCS = 04_ps3d_bb.c
ifeq ($(OS),Windows_NT)
# Windows
TARGET = 04_ps3d_bb.exe
GCC_VERSION=$(shell gcc -dumpversion)
ifeq ($(GCC_VERSION),6.3.0)
# MinGW gcc 6.3.0
LIBS = -static -lSOIL -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3dll -mwindows
else
# MinGW gcc 9.2.0, MSYS2
LIBS = -static -lSOIL -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3 -mwindows
endif
else
# Linux (Ubuntu Linux 22.04 LTS, gcc 11.4.0)
TARGET = 04_ps3d_bb
LIBS = -lSOIL -lGL -lGLU -lglfw -lm
endif
all: $(TARGET)
$(TARGET): $(SRCS) glbitmfont.h Makefile
gcc $< -o $@ $(LIBS)
.PHONY: clean
clean:
rm -f $(TARGET) *.o
◎ OpenGLを使う時のライブラリ指定 :
ついでなので、MinGW gcc や Linux + gcc で、OpenGL, glfw(glfw3), SOIL を使ってるプログラムをビルドする時のライブラリ指定もメモ。
Windowsの場合。
Linux (Ubuntu Linux (22.04|20.04) LTS) の場合。
ちなみに、Ubuntu Linux で SOIL(Simple OpenGL Image Library) や glfw3 を使いたい時はパッケージをインストールするだけで済む。
Windowsの場合。
gcc hoge.c -o hoge.exe -static -lSOIL -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3 -mwindows or gcc hoge.c -o hoge.exe -static -lSOIL -lopengl32 -lglu32 -lwinmm -lgdi32 -lglfw3dll -mwindows
Linux (Ubuntu Linux (22.04|20.04) LTS) の場合。
gcc hoge.c -o hoge -lSOIL -lGL -lGLU -lglfw -lm
ちなみに、Ubuntu Linux で SOIL(Simple OpenGL Image Library) や glfw3 を使いたい時はパッケージをインストールするだけで済む。
sudo apt install libsoil-dev sudo apt install libglfw3-dev
[ ツッコむ ]
以上です。