46 lines
1.3 KiB
CMake
46 lines
1.3 KiB
CMake
|
|
# Set policy if policy is available
|
|
function(set_policy POL VAL)
|
|
|
|
if(POLICY ${POL})
|
|
cmake_policy(SET ${POL} ${VAL})
|
|
endif()
|
|
|
|
endfunction(set_policy)
|
|
|
|
|
|
# Define function "source_group_by_path with three mandatory arguments (PARENT_PATH, REGEX, GROUP, ...)
|
|
# to group source files in folders (e.g. for MSVC solutions).
|
|
#
|
|
# Example:
|
|
# source_group_by_path("${CMAKE_CURRENT_SOURCE_DIR}/src" "\\\\.h$|\\\\.inl$|\\\\.cpp$|\\\\.c$|\\\\.ui$|\\\\.qrc$" "Source Files" ${sources})
|
|
function(source_group_by_path PARENT_PATH REGEX GROUP)
|
|
|
|
foreach (FILENAME ${ARGN})
|
|
|
|
get_filename_component(FILEPATH "${FILENAME}" REALPATH)
|
|
file(RELATIVE_PATH FILEPATH ${PARENT_PATH} ${FILEPATH})
|
|
get_filename_component(FILEPATH "${FILEPATH}" DIRECTORY)
|
|
|
|
string(REPLACE "/" "\\" FILEPATH "${FILEPATH}")
|
|
|
|
source_group("${GROUP}\\${FILEPATH}" REGULAR_EXPRESSION "${REGEX}" FILES ${FILENAME})
|
|
|
|
endforeach()
|
|
|
|
endfunction(source_group_by_path)
|
|
|
|
|
|
# Function that extract entries matching a given regex from a list.
|
|
# ${OUTPUT} will store the list of matching filenames.
|
|
function(list_extract OUTPUT REGEX)
|
|
|
|
foreach(FILENAME ${ARGN})
|
|
if(${FILENAME} MATCHES "${REGEX}")
|
|
list(APPEND ${OUTPUT} ${FILENAME})
|
|
endif()
|
|
endforeach()
|
|
|
|
set(${OUTPUT} ${${OUTPUT}} PARENT_SCOPE)
|
|
|
|
endfunction(list_extract)
|