cmake: Convert check_cxx_source_compiles_with_flags to a function

This commit is contained in:
Hennadii Stepanov
2025-02-20 12:39:03 +00:00
parent 88ee6800c9
commit 71bf8294a9
5 changed files with 48 additions and 16 deletions

View File

@@ -6,13 +6,34 @@ include_guard(GLOBAL)
include(CheckCXXSourceCompiles)
include(CMakePushCheckState)
macro(check_cxx_source_compiles_with_flags flags source)
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_FLAGS ${flags})
list(JOIN CMAKE_REQUIRED_FLAGS " " CMAKE_REQUIRED_FLAGS)
check_cxx_source_compiles("${source}" ${ARGN})
cmake_pop_check_state()
endmacro()
#[=[
Check once if C++ source code can be compiled.
Options:
CXXFLAGS - A list of additional flags to pass to the compiler.
LDFLAGS - A list of additional flags to pass to the linker.
LINK_LIBRARIES - A list of libraries to add to the link command.
For historical reasons, among the CMake `CMAKE_REQUIRED_*` variables that influence
`check_cxx_source_compiles()`, only `CMAKE_REQUIRED_FLAGS` is a string rather than
a list. Additionally, `target_compile_options()` also expects a list of options.
The `check_cxx_source_compiles_with_flags()` function handles this case and accepts
`CXXFLAGS` as a list, simplifying the code at the caller site.
#]=]
function(check_cxx_source_compiles_with_flags source result_var)
cmake_parse_arguments(PARSE_ARGV 2 _ "" "" "CXXFLAGS;LDFLAGS;LINK_LIBRARIES")
list(JOIN __CXXFLAGS " " CMAKE_REQUIRED_FLAGS)
set(CMAKE_REQUIRED_LINK_OPTIONS ${__LDFLAGS})
set(CMAKE_REQUIRED_LIBRARIES ${__LINK_LIBRARIES})
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("${source}" ${result_var})
set(${result_var} ${${result_var}} PARENT_SCOPE)
endfunction()
macro(check_cxx_source_links_with_libs libs source)
cmake_push_check_state(RESET)