[Obj-C] 16 GUIアプリ : MakefileをCMakeLists.txtへ移植

[M1 Mac, Big Sur 11.6.5, no Xcode]

MakefileをCMakeLists.txtへ移植しました。

CMakeが作成したMakefileがどういったコマンドを実行しているのか分からないので気が進まなかったのですが、非XCode環境で開発を進めるにはどうも避けられないためやむなく着手しました。

自製Makefileでは認識していた -lpython3.10がリンク時に見つからないというエラーへの対策でだいぶ時間を取られました。出力をよく読むとビルドの時にはちゃんと認識していたので、そのライブラリパスをtarget_link_librariesのところに書いたらうまくいきました。CMakeは案外融通の効かないところがあるようです。

いちいちbuildディレクトリに潜るのは面倒なのでプロジェクトフォルダのルートからMakefileでCMakeを実行するというちょっとややこしいけど楽なやり方で進めています。make allコマンド一発でCMakeを経てappファイルまで作ってくれます。

自製Makefileで作成したappファイルはボタン押下時に落ちてしまいましたが、今回のappファイルはクラッシュしません。これは全く期待していなかったのでうれしい限りです。

C++からわざわざObjective-Cへ移植したかいがありました。

ビルド時に-lpython3.10を認識しているが、リンク形成ではエラーになる。
cmake_minimum_required(VERSION 3.1)

# Project
Project(XlsxConvertor VERSION 1.0.0)
find_library(COREFOUNDATION CoreFoundation)
find_library(COCOA Cocoa)

# 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.m
    ./src/process.m
    ./include/process.h)

set(INCDIR ./include)
set(INCDIR ${INCDIR} /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10)
include_directories(${INCDIR})

set(LIBDIR /Library/Frameworks/Python.framework/Versions/3.10/lib)
link_directories(${LIBDIR})

set(LIBS dl)
set(LIBS ${LIBS} /Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib)

target_link_libraries(${PROJECT_NAME}
    ${COREFOUNDATION}
    ${COCOA}
    ${LIBS})
# CMakeを経てappファイル作成(アイコン登録含む)

TARGET = XlsxConvertor

.PHONY : all
all:
	rm -rf build/*
	cd /projects/XlsxConvertor09/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