CMake-Beispiel mit harfbuzz

In diesem Post möchte ich ein kleines Beispiel zeigen, wie man ein C++-Projekt mit harfbuzz kompiliert. Das alles zeige ich in einem CentOS docker Container. Aber das sollte eigentlich keinen Unterschied machen, d.h. das gezeigte Beispiel sollte auch auf einem normalen Linuxsystem funktionieren.

Für dieses Beispiel habe ich ein einfaches “Hello World”-Beispiel genommen, dass man üblicherweise in jedem C++-Anfängerbuch findet. Diese Datei habe ich main.cpp benannt:

#include <iostream>

int main(int argc, char **argv) {
        std::cout << "Hello World!" << std::endl;
        return 0;
}

Obwohl es hier keinen Code gibt der auf die Bibliothek harfbuzz verweist, kann man diesen Code problemlos gegen diese Bibliothek kompilieren / linken. Ich gehe davon aus, dass normalerweise auch der entsprechende Code in den Quelltextdateien zu finden ist, aber für diesen Post ist das nicht vonnöten. Jetzt muss ich nur noch die CMakeLists.txt entsprechend anpassen:

cmake_minimum_required(VERSION 3.0)
# Projektname setzen
project(harfbuzz_ex1)

# Alle Quelltextdateien in eine Variable packen
set(SOURCES main.cpp)

# Eine ausführbare Datei soll generiert werden ...
add_executable(${PROJECT_NAME} ${SOURCES})

# ... mit harfbuzz als abhängige Bibliothek
target_link_libraries(${PROJECT_NAME} harfbuzz)

Ist die CMakeLists.txt fertig, kann man mit dem Kompilieren / Linken anfangen:

cmake -G "Unix Makefiles" .
make

Beim ersten Versuch das Projekt zu übersetzen, bekam ich diese Fehlermeldung:

sh-4.2# make
[ 50%] Linking CXX executable harfbuzz_ex1
/usr/bin/ld: cannot find -lharfbuzz
collect2: error: ld returned 1 exit status
make[2]: *** [harfbuzz_ex1] Error 1
make[1]: *** [CMakeFiles/harfbuzz_ex1.dir/all] Error 2
make: *** [all] Error 2

Ich hatte die Bibliothek harfbuzz noch gar nicht auf meinem System installiert. Das musste ich natürlich schnell nachholen:

yum install -y harfbuzz-devel

Danach reichte es aus nochmal make aufrufen und schon konnte ich mein Projekt problemlos bauen und ausführen:

sh-4.2# make
[ 50%] Linking CXX executable harfbuzz_ex1
[100%] Built target harfbuzz_ex1
sh-4.2# ./harfbuzz_ex1
Hello World!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.