[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
mmファイルが増えてもMakefileに追記しなくてもいいように改良しました。
make allコマンドでappファイルを作成し、make all2では実行ファイルを作成します。LLDBでデバッグする際は実行ファイルを作成しています。
CMakeLists.txtのadd_executableのところもワイルドカードで追記不要にしたいところです。
# コンパイラ
COMPILER = clang++
DEBUG = -g
# オプション
CFLAGS = $(shell python3-config --includes)
LDFLAGS = $(shell python3-config --ldflags) -framework Cocoa
# includeパス(-I)
INCLUDE = -I./include -I/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10
# ライブラリパス(-l)
LIBRARY0 = -lpython3.10
# 優先ライブラリパス(-L)
LIBRARY = -L/Library/Frameworks/Python.framework/Versions/3.10/lib
# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)
# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src%,%,$(SRCS:.mm=.o)))
# 実行ファイル
TARGETDIR = ./bin
TARGET = XlsxConvertor
# コンパイル
$(OBJDIR)/%.o: $(SRCDIR)/%.mm
$(COMPILER) $(CFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<
# ビルド
$(TARGET):$(OBJS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LDFLAGS) $(LIBRARY0) $(LIBRARY)
# ファイル削除
.PHONY : clean
clean:
rm -rf $(OBJS) $(TARGETDIR)/$(TARGET)
# CMakeを経てappファイル作成
.PHONY : all
all:
rm -rf build/*
cd /projects/XlsxConvertor/build && cmake .. && make
mkdir ./build/$(TARGET).app/Contents/Resources
cp ./images/XlsxConvertor.icns ./build/$(TARGET).app/Contents/Resources
plutil -replace 'CFBundleIconFile' -string "XlsxConvertor.icns" ./build/$(TARGET).app/Contents/Info.plist
# 実行ファイルのみ作成
.PHONY : all2
all2: clean $(TARGET)
cmake_minimum_required(VERSION 3.1)
# Project
Project(XlsxConvertor VERSION 1.0.0)
find_library(COREFOUNDATION CoreFoundation)
find_library(COCOA Cocoa)
# コマンド表示
set(CMAKE_VERBOSE_MAKEFILE ON)
# Info.plist
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
set(MACOSX_BUNDLE_COPYRIGHT "Copyright (C) 2022")
set(MACOSX_BUNDLE_INFO_STRING "Convert tool for XLSX")
# XlsxConvertor
add_executable(${PROJECT_NAME}
MACOSX_BUNDLE
./src/XlsxConvertor.mm
./src/process.mm
./include/process.h
)
set(INCDIR ./include)
set(INCDIR ${INCDIR} /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10)
include_directories(${INCDIR})
set(LIBS dl)
set(LIBS ${LIBS} /Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib)
set(LIBDIR /Library/Frameworks/Python.framework/Versions/3.10/lib)
link_directories(${LIBDIR})
target_link_libraries(${PROJECT_NAME}
${COREFOUNDATION}
${COCOA}
${LIBS})