From 6815e71fc2a1874d043017da5dbcdecd0b3f121e Mon Sep 17 00:00:00 2001 From: Benji Trosch Date: Wed, 17 Apr 2024 12:35:34 -0400 Subject: [PATCH] Build specific example using -DBUILD_EXAMPLE cmake flag --- CMakeLists.txt | 5 ++++- CMakeOptions.txt | 1 + examples/CMakeLists.txt | 20 +++++++++++++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57719691aa5a..d5c066045647 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,10 @@ if(NOT TARGET uninstall) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() -if (${BUILD_EXAMPLES}) +if (NOT ${BUILD_EXAMPLE} STREQUAL "") + MESSAGE(STATUS "Building example '${BUILD_EXAMPLE}'") + add_subdirectory(examples) +elseif (${BUILD_EXAMPLES}) MESSAGE(STATUS "Building examples is enabled") add_subdirectory(examples) endif() diff --git a/CMakeOptions.txt b/CMakeOptions.txt index 2c58cd5cc227..76fa411ffadd 100644 --- a/CMakeOptions.txt +++ b/CMakeOptions.txt @@ -8,6 +8,7 @@ enum_option(OPENGL_VERSION "OFF;4.3;3.3;2.1;1.1;ES 2.0;ES 3.0" "Force a specific # Configuration options option(BUILD_EXAMPLES "Build the examples." ${RAYLIB_IS_MAIN}) +option(BUILD_EXAMPLE "Build a specific example by filename." "") option(CUSTOMIZE_BUILD "Show options for customizing your Raylib library build." OFF) option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF) option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 9223236741c8..0f4be218798f 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -48,10 +48,24 @@ endif () # into a CMake variable set(example_sources) set(example_resources) +set(example_found FALSE) foreach (example_dir ${example_dirs}) - # Get the .c files - file(GLOB sources ${example_dir}/*.c) - list(APPEND example_sources ${sources}) + if (BUILD_EXAMPLE) + if (NOT example_found) + file(GLOB sources ${example_dir}/${BUILD_EXAMPLE}.c) + if (EXISTS ${sources}) + list(APPEND example_sources ${sources}) + set(example_found TRUE) + message("Raylib example '${BUILD_EXAMPLE}.c' found in ${example_dir}!") + else() + message("Raylib example '${BUILD_EXAMPLE}.c' not found in ${example_dir}...") + endif() + endif() + else() + # Get the .c files + file(GLOB sources ${example_dir}/*.c) + list(APPEND example_sources ${sources}) + endif() # Any any resources file(GLOB resources ${example_dir}/resources/*)