From 70b04513380f1bf62d293e48d1bdcad82be4aa11 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 6 Aug 2025 22:17:50 +0200 Subject: [PATCH] cmake: add fast example build-only target --- docs/examples/CMakeLists.txt | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/examples/CMakeLists.txt b/docs/examples/CMakeLists.txt index f69445fbfe..a4277ed620 100644 --- a/docs/examples/CMakeLists.txt +++ b/docs/examples/CMakeLists.txt @@ -28,12 +28,27 @@ add_custom_target(curl-examples) curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") -foreach(_target IN LISTS check_PROGRAMS) +set(_all "all") +foreach(_target IN LISTS check_PROGRAMS _all) set(_target_name "curl-example-${_target}") - add_executable(${_target_name} EXCLUDE_FROM_ALL "${_target}.c") - add_dependencies(curl-examples ${_target_name}) + if(_target STREQUAL "all") + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) + set(_example_c "${check_PROGRAMS}") + list(TRANSFORM _example_c APPEND ".c") + add_library(${_target_name} OBJECT EXCLUDE_FROM_ALL ${_example_c}) + message(STATUS "|${_example_c}|") + endif() + else() + set(_onetest ${_target_name}) # ends with a single, existing test for curl-examples-build target + add_executable(${_target_name} EXCLUDE_FROM_ALL "${_target}.c") + add_dependencies(curl-examples ${_target_name}) + endif() target_link_libraries(${_target_name} ${LIB_SELECTED} ${CURL_NETWORK_AND_TIME_LIBS}) target_compile_definitions(${_target_name} PRIVATE "CURL_NO_OLDIES" "$<$:WIN32_LEAN_AND_MEAN>" "$<$:_CRT_SECURE_NO_DEPRECATE>") set_target_properties(${_target_name} PROPERTIES OUTPUT_NAME "${_target}" PROJECT_LABEL "Example ${_target}" UNITY_BUILD OFF) endforeach() + +# Special target to compile all tests quickly and build a single test to probe linkage +add_custom_target(curl-examples-build) +add_dependencies(curl-examples-build curl-example-all "${_onetest}")