Unable to find SDL_ttf in cmake

I am on Ubuntu :slight_smile:
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy

I am using sdl2 (version 2.0.20+dfsg)
Using SDL_ttf (version libsdl2-ttf-dev 2.0.18+dfsg-2

Here is my CMakeList.txt file:

cmake_minimum_required (VERSION 3.22)

set (CMAKE_CXX_STANDARD 11)

cmake_policy(SET CMP0072 NEW)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} β€œ${CMAKE_SOURCE_DIR}/cmake”)
project (attempt1)

SDL2

find_package(SDL2 REQUIRED)
find_package(SDL_ttf REQUIRED)

include_directories(${SDL2_INCLUDE_DIRS})
include_directories(${SDL_TTF_INCLUDE_DIRS})

message(STATUS β€œ<<${SDL2_INCLUDE_DIRS}>>”)

message(STATUS β€œ<<${OPENGL_INCLUDE_DIR}>>”)

Main Executable

add_definitions(β€œ-Wall -O0 -g”)
#add_definitions(β€œ-Wall -Werror -O0 -g”)
add_executable(attempt1 attempt1.cpp)
target_include_directories(attempt1 PUBLIC ${CMAKE_SOURCE_DIR}/src)

Libraries

target_link_libraries(attempt1 ${SDL2_LIBRARIES})
target_link_libraries(attempt1 m)
target_link_libraries(attempt1 ${SDL_TTF_LIBRARIES})/

message(STATUS β€œ<<${SDL2_LIBRARIES}>>”)

Here is the content of the /usr/share/cmake-3.22/Modules/FindSDL_ttf.cmake file:

Distributed under the OSI-approved BSD 3-Clause License. See accompanying

file Copyright.txt or Licensing for CMake for details.

#[=======================================================================[.rst:
FindSDL_ttf

Locate SDL_ttf library

This module defines:

::

SDL_TTF_LIBRARIES, the name of the library to link against
SDL_TTF_INCLUDE_DIRS, where to find the headers
SDL_TTF_FOUND, if false, do not try to link against
SDL_TTF_VERSION_STRING - human-readable string containing the version of SDL_ttf

For backward compatibility the following variables are also set:

::

SDLTTF_LIBRARY (same value as SDL_TTF_LIBRARIES)
SDLTTF_INCLUDE_DIR (same value as SDL_TTF_INCLUDE_DIRS)
SDLTTF_FOUND (same value as SDL_TTF_FOUND)

$SDLDIR is an environment variable that would correspond to the
./configure --prefix=$SDLDIR used in building SDL.

Created by Eric Wing. This was influenced by the FindSDL.cmake
module, but with modifications to recognize OS X frameworks and
additional Unix paths (FreeBSD, etc).
#]=======================================================================]

if(NOT SDL_TTF_INCLUDE_DIR AND SDLTTF_INCLUDE_DIR)
set(SDL_TTF_INCLUDE_DIR ${SDLTTF_INCLUDE_DIR} CACHE PATH β€œdirectory cache
entry initialized from old variable name”)
endif()
find_path(SDL_TTF_INCLUDE_DIR SDL_ttf.h
HINTS
ENV SDLTTFDIR
ENV SDLDIR
PATH_SUFFIXES SDL
# path suffixes to search inside ENV{SDLDIR}
include/SDL include/SDL12 include/SDL11 include
)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(VC_LIB_PATH_SUFFIX lib/x64)
else()
set(VC_LIB_PATH_SUFFIX lib/x86)
endif()

if(NOT SDL_TTF_LIBRARY AND SDLTTF_LIBRARY)
set(SDL_TTF_LIBRARY ${SDLTTF_LIBRARY} CACHE FILEPATH β€œfile cache entry
initialized from old variable name”)
endif()
find_library(SDL_TTF_LIBRARY
NAMES SDL_ttf
HINTS
ENV SDLTTFDIR
ENV SDLDIR
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
)

if(SDL_TTF_INCLUDE_DIR AND EXISTS β€œ${SDL_TTF_INCLUDE_DIR}/SDL_ttf.h”)
file(STRINGS β€œ${SDL_TTF_INCLUDE_DIR}/SDL_ttf.h” SDL_TTF_VERSION_MAJOR_LINE REGEX β€œ^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+[0-9]+$”)
file(STRINGS β€œ${SDL_TTF_INCLUDE_DIR}/SDL_ttf.h” SDL_TTF_VERSION_MINOR_LINE REGEX β€œ^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+[0-9]+$”)
file(STRINGS β€œ${SDL_TTF_INCLUDE_DIR}/SDL_ttf.h” SDL_TTF_VERSION_PATCH_LINE REGEX β€œ^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+[0-9]+$”)
string(REGEX REPLACE β€œ^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+([0-9]+)$” β€œ\1” SDL_TTF_VERSION_MAJOR β€œ${SDL_TTF_VERSION_MAJOR_LINE}”)
string(REGEX REPLACE β€œ^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+([0-9]+)$” β€œ\1” SDL_TTF_VERSION_MINOR β€œ${SDL_TTF_VERSION_MINOR_LINE}”)
string(REGEX REPLACE β€œ^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+([0-9]+)$” β€œ\1” SDL_TTF_VERSION_PATCH β€œ${SDL_TTF_VERSION_PATCH_LINE}”)
set(SDL_TTF_VERSION_STRING ${SDL_TTF_VERSION_MAJOR}.${SDL_TTF_VERSION_MINOR}.${SDL_TTF_VERSION_PATCH})
unset(SDL_TTF_VERSION_MAJOR_LINE)
unset(SDL_TTF_VERSION_MINOR_LINE)
unset(SDL_TTF_VERSION_PATCH_LINE)
unset(SDL_TTF_VERSION_MAJOR)
unset(SDL_TTF_VERSION_MINOR)
unset(SDL_TTF_VERSION_PATCH)
endif()

set(SDL_TTF_LIBRARIES ${SDL_TTF_LIBRARY})
set(SDL_TTF_INCLUDE_DIRS ${SDL_TTF_INCLUDE_DIR})

include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL_ttf
REQUIRED_VARS SDL_TTF_LIBRARIES SDL_TTF_INCLUDE_DIRS
VERSION_VAR SDL_TTF_VERSION_STRING)

for backward compatibility

set(SDLTTF_LIBRARY ${SDL_TTF_LIBRARIES})
set(SDLTTF_INCLUDE_DIR ${SDL_TTF_INCLUDE_DIRS})
set(SDLTTF_FOUND ${SDL_TTF_FOUND})

mark_as_advanced(SDL_TTF_LIBRARY SDL_TTF_INCLUDE_DIR)

Here is the error that I am getting:

===========================================================
maallyn@maallyn-geekcom:~/scope-attempt/sdl2/attempt1/build$ cmake …
– The C compiler identification is GNU 11.4.0
– The CXX compiler identification is GNU 11.4.0
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working C compiler: /usr/bin/cc - skipped
– Detecting C compile features
– Detecting C compile features - done
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Check for working CXX compiler: /usr/bin/c++ - skipped
– Detecting CXX compile features
– Detecting CXX compile features - done
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find SDL_ttf (missing: SDL_TTF_LIBRARIES SDL_TTF_INCLUDE_DIRS)
Call Stack (most recent call first):
/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.22/Modules/FindSDL_ttf.cmake:91 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:11 (find_package)

– Configuring incomplete, errors occurred!

Is there some sort of incompatability between the sdl2 verson and the sdl_ttf version for Ubuntu?

Thank you

Mark Allyn

In your CMakeLists, you’re looking for SDL_ttf rather than SDL2_ttf. The former is meant for SDL 1.2 and is most likely not installed on your system.

To fix this, you want:

  1. Make sure the right packages are installed: sudo apt install libsdl2-dev libsdl2-ttf-dev
  2. Update your CMakeLists as follows:
find_package(SDL2 CONFIG REQUIRED)
find_package(SDL2_ttf CONFIG REQUIRED)

target_link_libraries(attempt1 PRIVATE SDL2::SDL2 SDL2_ttf::SDL2_ttf)

This should be all you need to link both libraries, and add their include directories to your build.