Skip to content

Commit f473c95

Browse files
Merge bitcoin-core#1543: cmake: Do not modify build types when integrating by downstream project
158f9e5 cmake: Do not modify build types when integrating by downstream project (Hennadii Stepanov) Pull request description: The `CMAKE_BUILD_TYPE` and `CMAKE_CONFIGURATION_TYPES` must be managed by the downstream project. Suggesting to review with `git diff -w`. Fixes `std::out_of_range` exception from CMake in hebasto/bitcoin#192 when running configuration step using "Ninja Multi-Config" generator: ``` $ cmake -B build -G "Ninja Multi-Config" ... -- Configuring done (17.1s) terminate called after throwing an instance of 'std::out_of_range' what(): map::at Aborted (core dumped) ``` Here are related discussions: - https://discourse.cmake.org/t/uncaught-exception-when-trying-to-generate-a-project-using-ninja-multi-config/11051 - https://gitlab.kitware.com/cmake/cmake/-/issues/26064 ACKs for top commit: real-or-random: ACK 158f9e5 Tree-SHA512: b3040f40438d530f14b7e0f7d523e74b5843d88d250ff7955a99cc8c451feb9471a48134d1a89b3651b3f8195f91c17135c7b8a5d3ab092c8d35275b57743b8c
2 parents d403eea + 158f9e5 commit f473c95

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

CMakeLists.txt

+17-15
Original file line numberDiff line numberDiff line change
@@ -213,23 +213,25 @@ mark_as_advanced(
213213
CMAKE_SHARED_LINKER_FLAGS_COVERAGE
214214
)
215215

216-
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
217-
set(default_build_type "RelWithDebInfo")
218-
if(is_multi_config)
219-
set(CMAKE_CONFIGURATION_TYPES "${default_build_type}" "Release" "Debug" "MinSizeRel" "Coverage" CACHE STRING
220-
"Supported configuration types."
221-
FORCE
222-
)
223-
else()
224-
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
225-
STRINGS "${default_build_type}" "Release" "Debug" "MinSizeRel" "Coverage"
226-
)
227-
if(NOT CMAKE_BUILD_TYPE)
228-
message(STATUS "Setting build type to \"${default_build_type}\" as none was specified")
229-
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING
230-
"Choose the type of build."
216+
if(PROJECT_IS_TOP_LEVEL)
217+
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
218+
set(default_build_type "RelWithDebInfo")
219+
if(is_multi_config)
220+
set(CMAKE_CONFIGURATION_TYPES "${default_build_type}" "Release" "Debug" "MinSizeRel" "Coverage" CACHE STRING
221+
"Supported configuration types."
231222
FORCE
232223
)
224+
else()
225+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
226+
STRINGS "${default_build_type}" "Release" "Debug" "MinSizeRel" "Coverage"
227+
)
228+
if(NOT CMAKE_BUILD_TYPE)
229+
message(STATUS "Setting build type to \"${default_build_type}\" as none was specified")
230+
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING
231+
"Choose the type of build."
232+
FORCE
233+
)
234+
endif()
233235
endif()
234236
endif()
235237

0 commit comments

Comments
 (0)