[M1 Mac, Big Sur 11.6.7, FLTK 1.3.8, clang 13.0.0, no IDE]
プロジェクトのディレクトリ構成は下図の通りです。
Makefile, CMakeLists.txtも載せておきます。
# コンパイラ
COMPILER = clang++
DEBUG = -g
# オプション
CPPFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags ) -std=c++11
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags ) -lc++
# includeパス(-I)
INCLUDE = -I./include -I/opt/homebrew/Cellar/libpng/1.6.37/include -I/opt/homebrew/Cellar/fltk/1.3.8/include \
-I/opt/homebrew/Cellar/opencv/4.5.5_2/include
# ライブラリ直接パス(-l)
LIBRARYD = -lpng16 -lz -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc
# ライブラリパス(-L)
LIBRARY = -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib \
-L/usr/local/lib -L/opt/homebrew/Cellar/opencv/4.5.5_2/lib
# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)
# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src%,%,$(SRCS:.cpp=.o)))
# 実行ファイル
TARGETDIR = ./bin
TARGET = PPPGui
# プロジェクト
PROJ = PPP02
# コンパイル
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<
# appファイル作成関連
POSTBUILD = fltk-config --post
# ビルド:oファイルから実行ファイルとappファイル作成
$(TARGET):$(OBJS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARYD) $(LDFLAGS) $(LIBRARY)
cp $(TARGETDIR)/$(TARGET) ./app/$(TARGET)
cd ./app && $(POSTBUILD) $(TARGET)
mkdir ./app/$(TARGET).app/Contents/Resources
cp ./images/$(TARGET).icns ./app/$(TARGET).app/Contents/Resources
plutil -insert 'CFBundleIconFile' -string $(TARGET).icns ./app/$(TARGET).app/Contents/Info.plist
rm -f ./app/$(TARGET)
# ファイル削除
.PHONY:clean
clean:
rm -rf $(OBJS) $(TARGETDIR)/$(TARGET) $(TARGET).app $(SRCDIR)/.DS_Store ./app/*
# CMakeからappファイル作成
.PHONY : all
all:
rm -rf build/* $(SRCDIR)/.DS_Store
cd /Volumes/DATA_m1/code/cpp/projects/$(PROJ)/build && cmake .. && make
mkdir ./build/$(TARGET).app/Contents/Resources
cp ./images/$(TARGET).icns ./build/$(TARGET).app/Contents/Resources
plutil -replace 'CFBundleIconFile' -string "$(TARGET).icns" ./build/$(TARGET).app/Contents/Info.plist
# 自製Makefileから実行ファイルおよびappファイル作成
.PHONY:all2
all2: clean $(TARGET)
# 実行ファイルからappファイル作成(Info.plistが必要)
.PHONY : exetoapp
exetoapp:
mkdir $(TARGETDIR)/$(TARGET)
mkdir $(TARGETDIR)/$(TARGET)/Contents
mkdir $(TARGETDIR)/$(TARGET)/Contents/MacOS
mkdir $(TARGETDIR)/$(TARGET)/Contents/Resources
cp $(TARGETDIR)/$(TARGET).exe $(TARGETDIR)/$(TARGET)/Contents/MacOS
cp ./Info.plist $(TARGETDIR)/$(TARGET)/Contents
cp ./images/test.icns $(TARGETDIR)/$(TARGET)/Contents/Resources
plutil -replace 'CFBundleIconFile' -string "test.icns" $(TARGETDIR)/$(TARGET)/Contents/Info.plist
cmake_minimum_required(VERSION 3.1)
# Project
Project(PPPGui VERSION 1.0.0)
FIND_PACKAGE(FLTK REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
find_library(COCOA Cocoa)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE ON)
# Info.plist
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
set(MACOSX_BUNDLE_COPYRIGHT "")
set(MACOSX_BUNDLE_INFO_STRING "")
set(MACOSX_BUNDLE_GUI_IDENTIFIER "")
# ファイル設定
file(GLOB SOURCE ./src/*.cpp ./include/*.h)
add_executable(${PROJECT_NAME}
MACOSX_BUNDLE
${SOURCE}
)
set(INCDIR ./include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/libpng/1.6.37/include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/fltk/1.3.8/include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/jpeg/9e/include)
include_directories(${INCDIR})
set(LIBS dl)
set(LIBS ${LIBS} z pthread c++)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_forms.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_gl.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_images.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/jpeg/9e/lib/libjpeg.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/libpng/1.6.37/lib/libpng.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk.dylib)
set(LIBDIR /opt/homebrew/Cellar/jpeg/9e/lib)
set(LIBDIR ${LIBDIR} /opt/homebrew/Cellar/libpng/1.6.37/lib)
set(LIBDIR ${LIBDIR} /opt/homebrew/Cellar/fltk/1.3.8/lib)
link_directories(${LIBDIR})
target_link_libraries(${PROJECT_NAME}
${FLTK}
${OpenGL}
${LIBS}
${COCOA})