※注:解決した後に思い出しながら書いている為、不正確な所があるかもしれないです
環境
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は見つかり、動作するようになる。