OSX SFMLをビルドして使うまでの話


※注:解決した後に思い出しながら書いている為、不正確な所があるかもしれないです

環境

ProductName:    Mac OS X
ProductVersion: 10.11.3
BuildVersion:   15D21
cmake: 3.3.0
clang:Apple LLVM version 7.0.2 (clang-700.1.81)

対象者

  • SFMLを使おうかなーと思っている人

事始め

とりあえずgithubからSFMLをDLしてこよう

git clone https://github.com/SFML/SFML.git

ビルドする

cd ./SFML
cmake . -G 'Unix Makefiles' \
      -DCMAKE_OSX_ARCHITECTURES='i386;x86_64' \
      -DCMAKE_CXX_COMPILER='/usr/bin/clang++' \
      -DCMAKE_C_COMPILER='/usr/bin/clang' \
      -DSFML_BUILD_FRAMEWORKS='ON' \
      -DSFML_INSTALL_XCODE4_TEMPLATES='ON' \
      -DCMAKE_CXX_FLAGS='-stdlib=libc++' \
      -DCMAKE_C_FLAGS='-stdlib=libc++'
make -j4 #もしfreetype関係でエラーが出た場合は次の項を参照の事
sudo make install

freetypeがねーよ!

どうもfreetypeが存在しない場合があるようですねー
困ります、困ります

brew install freetype
ln -s /usr/local/Cellar/freetype/2.6.3/include/freetype2/freetype/ /usr/local/include/freetype

とりあえず includeディレクトリから見て、 /freetype/config/ftheader.h となるようにシンボリックリンクを作ると解決する。

とりあえず動かしてみる

公式にチュートリアルがありますんで参考にしよう
http://www.sfml-dev.org/tutorials/2.1/start-linux.php

CMakeで使う

cmake_minimum_required (VERSION 2.6)


SET(PROJECT_NAME ProjectName)
# コンパイラ
SET(CMAKE_C_COMPILER clang)
SET(CMAKE_CXX_COMPILER clang++)
# リリースビルド用オプション
SET(CMAKE_CXX_FLAGS_RELEASE "-Wall -O2")
# デバッグビルド用オプション
SET(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0")
# ビルドの基本フラグ
SET(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
# ビルドのタイプ
SET(CMAKE_BUILD_TYPE Debug)
# ext type
SET(PUTTYPE ".out")
# バージョン
SET(serial "0.0.1")

SET(MAIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")

PROJECT(${PROJECT_NAME}${PUTTYPE})

ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES} ${MAIN_SOURCES})

find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED)

# includes
include_directories(${PROJECT_NAME} ${SFML_INCLUDE_DIR})

# target link
target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES}) 

cmake .
make
./ProjectName.out

Moduleがないんですけど!って言われた場合

そもそも、cmakeは、find_packageの時に、cmake/modulesディレクトリの
FindHoge.cmakeファイルを見て、パッケージがあるかないか判断しているっぽい(適当)

SFMLの場合は、FindSFML.cmakeファイルが
SFML/cmake/Modules
に存在しているみたいなんで、上記ディレクトリの中身のcmakeファイルを
/usr/local/Cellar/cmake/3.3.0/share/cmake/modules
へコピーすると、Moduleは見つかり、動作するようになる。