| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # This file should contain custom functions and macro and them only.
- # It's should not alter any configuration on inclusion
- #######################################
- # Build output path #
- #######################################
- macro(vcmi_set_output_dir name dir)
- # Multi-config builds for Visual Studio, Xcode
- foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
- string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIGUPPERCASE)
- set_target_properties(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIGUPPERCASE} ${CMAKE_BINARY_DIR}/bin/${OUTPUTCONFIG}/${dir})
- set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIGUPPERCASE} ${CMAKE_BINARY_DIR}/bin/${OUTPUTCONFIG}/${dir})
- set_target_properties(${name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIGUPPERCASE} ${CMAKE_BINARY_DIR}/bin/${OUTPUTCONFIG}/${dir})
- endforeach()
- # Generic no-config case for Makefiles, Ninja.
- # This is what Qt Creator is using
- set_target_properties(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${dir})
- set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${dir})
- set_target_properties(${name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${dir})
- endmacro()
- #######################################
- # Project generation #
- #######################################
- # Let us have proper tree-like structure in IDEs such as Visual Studio
- function(assign_source_group)
- foreach(_source IN ITEMS ${ARGN})
- if(IS_ABSOLUTE "${_source}")
- file(RELATIVE_PATH _source_rel "${CMAKE_CURRENT_SOURCE_DIR}" "${_source}")
- else()
- set(_source_rel "${_source}")
- endif()
- get_filename_component(_source_path "${_source_rel}" PATH)
- string(REPLACE "/" "\\" _source_path_msvc "${_source_path}")
- source_group("${_source_path_msvc}" FILES "${_source}")
- endforeach()
- endfunction(assign_source_group)
- # Macro to add subdirectory and set appropriate FOLDER for generated projects files
- function(add_subdirectory_with_folder _folder_name _folder)
- add_subdirectory(${_folder} ${ARGN})
- set_property(DIRECTORY "${_folder}" PROPERTY FOLDER "${_folder_name}")
- endfunction()
- # Macro for Xcode Projects generation
- # Slightly outdated, but useful reference for all options available here:
- # https://pewpewthespells.com/blog/buildsettings.html
- # https://github.com/samdmarshall/Xcode-Build-Settings-Reference
- if(${CMAKE_GENERATOR} MATCHES "Xcode")
- macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
- set_property(TARGET ${TARGET} PROPERTY
- XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
- endmacro(set_xcode_property)
- endif(${CMAKE_GENERATOR} MATCHES "Xcode")
- #######################################
- # CMake debugging #
- #######################################
- # Can be called to see check cmake variables and environment variables
- # For "install" debugging just copy it here. There no easy way to include modules from source.
- function(vcmi_get_cmake_debug_info)
- message(STATUS "Debug - Internal variables:")
- get_cmake_property(_variableNames VARIABLES)
- foreach(_variableName ${_variableNames})
- message(STATUS "${_variableName}=${${_variableName}}")
- endforeach()
- message(STATUS "Debug - Environment variables:")
- execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
- endfunction()
|