Fixed bug 3166 - It would be nice, if SDL would support including SDL project as a subdirectory into another CMake project
authorSam Lantinga <slouken@libsdl.org>
Mon, 24 Sep 2018 08:41:59 -0700
changeset 121994972784f494e
parent 12198 5231eb2ac4fd
child 12200 c0b17b32b95e
Fixed bug 3166 - It would be nice, if SDL would support including SDL project as a subdirectory into another CMake project

Wayde Reitsma

After attempting to use SDL2 in the way described in this bug, I found the main issue was the includes not being added to the compiler command.

I found the issue was that the target_include_directories commands for the SDL2, SDL2-static and SDL2main targets only sets the public includes for installations using the INSTALL_INTERFACE generator expression.

I have written a patch to CMakeLists.txt that fixes this issue by adding another item to the target_include_directories commands, utilizing the BUILD_INTERFACE generator expression to correctly add the include directory during builds.
CMakeLists.txt
     1.1 --- a/CMakeLists.txt	Fri Sep 21 09:41:21 2018 -0700
     1.2 +++ b/CMakeLists.txt	Mon Sep 24 08:41:59 2018 -0700
     1.3 @@ -1718,7 +1718,7 @@
     1.4  
     1.5  # Always build SDLmain
     1.6  add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
     1.7 -target_include_directories(SDL2main PUBLIC $<INSTALL_INTERFACE:include/SDL2>)
     1.8 +target_include_directories(SDL2main PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
     1.9  set(_INSTALL_LIBS "SDL2main")
    1.10  if (NOT ANDROID)
    1.11    set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
    1.12 @@ -1747,7 +1747,7 @@
    1.13    endif()
    1.14    set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
    1.15    target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
    1.16 -  target_include_directories(SDL2 PUBLIC $<INSTALL_INTERFACE:include/SDL2>)
    1.17 +  target_include_directories(SDL2 PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
    1.18    if (NOT ANDROID)
    1.19      set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
    1.20    endif()
    1.21 @@ -1773,7 +1773,7 @@
    1.22    # libraries - do we need to consider this?
    1.23    set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
    1.24    target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
    1.25 -  target_include_directories(SDL2-static PUBLIC $<INSTALL_INTERFACE:include/SDL2>)
    1.26 +  target_include_directories(SDL2-static PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
    1.27    if (NOT ANDROID)
    1.28      set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
    1.29    endif()