# SDL: Optionally disable generation of SDL2main and uninstall projects.

**URL:** <https://discourse.libsdl.org/t/sdl-optionally-disable-generation-of-sdl2main-and-uninstall-projects/34446>\
**Category:** SDL Commits\
**Created:** [January 11, 2022, 11:58pm UTC](https://discourse.libsdl.org/t/sdl-optionally-disable-generation-of-sdl2main-and-uninstall-projects/34446 "2022-01-11T23:58:02Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![SDLPushPostBot](https://discourse.libsdl.org/user_avatar/discourse.libsdl.org/sdlpushpostbot/32/4370_2.png) [@SDLPushPostBot](https://discourse.libsdl.org/u/SDLPushPostBot)\
**Post date:** [January 11, 2022, 11:58pm UTC](https://discourse.libsdl.org/t/sdl-optionally-disable-generation-of-sdl2main-and-uninstall-projects/34446/1 "2022-01-11T23:58:02Z")

</div>

> <https://github.com/libsdl-org/SDL/commit/bb9ebad74bf0c31157bde09d4ca86dad622aa4a3>
>
> Mostly meant to allow SDL2 to be incorporated as a sub-project of
> external CMake… projects.

```diff
From bb9ebad74bf0c31157bde09d4ca86dad622aa4a3 Mon Sep 17 00:00:00 2001
From: ulatekh <[EMAIL REDACTED]>
Date: Tue, 11 Jan 2022 09:34:14 -0700
Subject: [PATCH] Optionally disable generation of SDL2main and uninstall
 projects.

Mostly meant to allow SDL2 to be incorporated as a sub-project of
external CMake projects.
---
 CMakeLists.txt | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 50c1eae094e..1ec19a03eec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -370,6 +370,10 @@ foreach(_SUB ${SDL_SUBSYSTEMS})
   option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ${SDL_${_OPT}_ENABLED_BY_DEFAULT})
 endforeach()
 
+# Allow some projects to be built conditionally.
+set_option(SDL2_DISABLE_SDL2MAIN "Disable building/installation of SDL2main" OFF)
+set_option(SDL2_DISABLE_UNINSTALL "Disable uninstallation of SDL2" OFF)
+
 option_string(SDL_ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
 #set_option(SDL_DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
 set_option(SDL_LIBC "Use the system C library" ${OPT_DEF_LIBC})
@@ -1786,8 +1790,11 @@ elseif(WINDOWS)
   if(MINGW OR CYGWIN)
     list(APPEND EXTRA_LIBS mingw32)
     list(APPEND EXTRA_LDFLAGS "-mwindows")
- set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main")
- list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows")
+ list(APPEND SDL_LIBS "-lmingw32" "-mwindows")
+ if(NOT SDL2_DISABLE_SDL2MAIN)
+ set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main")
+ list(APPEND SDL_LIBS "-lSDL2main")
+ endif(NOT SDL2_DISABLE_SDL2MAIN)
   endif()
 
 elseif(APPLE)
@@ -2818,8 +2825,8 @@ endif()
 # Ensure that the extra cflags are used at compile time
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
 
-# Always build SDLmain
-if(NOT WINDOWS_STORE)
+if(NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN)
+ # Build SDLmain
   add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
   # alias target for in-tree builds
   add_library(SDL2::SDL2main ALIAS SDL2main)
@@ -2929,7 +2936,7 @@ if(SDL_SHARED)
     RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
 endif()
 
-if(NOT WINDOWS_STORE)
+if(NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN)
   install(TARGETS SDL2main EXPORT SDL2mainTargets
     LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
@@ -2964,7 +2971,7 @@ if(SDL_SHARED)
   )
 endif()
 
-if(NOT WINDOWS_STORE)
+if(NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN)
   install(EXPORT SDL2mainTargets
     FILE SDL2mainTargets.cmake
     NAMESPACE SDL2::
@@ -3030,6 +3037,7 @@ endif()
 
 ##### Uninstall target #####
 
+if(NOT SDL2_DISABLE_UNINSTALL)
 if(NOT TARGET uninstall)
   configure_file(
       "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
@@ -3039,3 +3047,4 @@ if(NOT TARGET uninstall)
   add_custom_target(uninstall
       COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
 endif()
+endif(NOT SDL2_DISABLE_UNINSTALL)

```
