Arne Gockeln
Softwareentwickler und Linux Enthusiast

wxWidgets mit CMake unter macOS kompilieren

Für ein neues C++ Projekt will ich das wxWidgets GUI Framework verwenden. Meine Entwicklungsumgebung besteht aus CLion 2017.2, macOS Sierra (10.12.5), Apple LLVM version 8.1.0 (clang-802.0.42), und wxWidgets 3.0.3. Ich hab 2 Tage gebraucht, um das Setup ans laufen zu bekommen. Daher schreibe ich meinen Weg hier mal kurz auf und archivere ihn.

wxWidgets kompilieren

Auf der Webseite wxwidgets.org unter Downloads den “last stable release” herunterladen. In diesem Fall: https://github.com/wxWidgets/wxWidgets/releases/download/v3.0.3/wxWidgets-3.0.3.tar.bz2 und in ~/Downloads entpacken. Dann wie folgt im Terminal vorgehen:

Zuerst die Umgebungsvariablen auf den clang Compiler mit C++14 Standard setzen:

$ export CC="clang -mmacosx-version-min=10.9"
$ export CXX="clang++ -std=c++14 -stdlib=libc++ -mmacosx-version-min=10.9"

Dann ein Build Verzeichnis im wxWidgets Source Verzeichnis anlegen:

$ cd ~/Downloads/wxWidgets-3.0.3
$ mkdir macbuild && cd macbuild

Danach configure mit den Parametern ausführen:

$ ../configure --disable-shared --with-macosx-version-min=10.9

Wenn das configure Script durchgelaufen ist:

$ make

Das dauert jetzt ne ganze Weile. Auf meinem 13” Macbook Pro (2016); 2,9 GHz i5, 16 GB Ram hat das knapp 15 Minuten gedauert. In der Zwischenzeit kannst du ja ne Runde nethack spielen.

Wenn make dann fertig ist, installiere ich wxWidgets unter /usr/local/lib und /usr/local/include:

$ sudo make install

make installiert die includes in das Verzeichnis /usr/local/include/wx-3.0. Dummerweise findet CLion die Header Dateien dann nicht. Also setze ich einen symbolischen Link auf das Verzeichnis:

$ cd /usr/local/include
$ ln -sv wx-3.0 wx

Ein grober Stolperstein war die nicht vorhandene setup.h im Verzeichnis /usr/local/include/wx. Also kopiere ich diese einfach wie folgt:

$ find /usr/local -name "setup.h"
/usr/local/lib/wx/include/osx_cocoa-unicode-static-3.0/wx/setup.h
$ sudo cp /usr/local/lib/wx/include/osx_cocoa-unicode-static-3.0/wx/setup.h /usr/local/include/wx/

CLion CMakeLists.txt

Nun folgt die Konfiguration für das CLion C++ Projekt:

# minimum cmake version required
cmake_minimum_required(VERSION 3.8)
# Projectname
project(twoFA)
# Location where cmake first looks for cmake modules
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
# set c++14 standard
set(CMAKE_CXX_STANDARD 14)
# set configuration for osx
set(wxWidgets_CONFIGURATION osx)
# set CXX compiler flags
set(wxWidgets_CXX_FLAGS `wx-config --cxxflags` `wx-config --libs`)
# define wxWidgets libraries, to find which one look here http://docs.wxwidgets.org/2.8.8/wx_librarieslist.html
find_package(wxWidgets COMPONENTS core base REQUIRED)
# include wxWidgets
include(${wxWidgets_USE_FILE})
# set source files to compile
set(SOURCE_FILES main.cpp MainFrame.cpp MainFrame.h)
# set executable
add_executable(twoFA ${SOURCE_FILES})
# link against wxWidgets
target_link_libraries(twoFA ${wxWidgets_LIBRARIES})

Fertig.

Eigentlich ganz einfach. :)

comments powered by Disqus