macros.cmake 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. macro(global_set Name Value)
  2. # message("set ${Name} to " ${ARGN})
  3. set(${Name} "${Value}" CACHE STRING "NoDesc" FORCE)
  4. endmacro()
  5. macro(condition_set Name Value)
  6. if (NOT ${Name})
  7. global_set(${Name} ${Value})
  8. else ()
  9. # message("exists ${Name} is " ${ARGN})
  10. endif ()
  11. endmacro()
  12. set(SOURCE_FILES "" CACHE STRING "Source Files" FORCE)
  13. macro(add_source_files)
  14. # message(" + add_source_files ${ARGN}")
  15. file(GLOB_RECURSE newlist ${ARGN})
  16. foreach (filepath ${newlist})
  17. string(FIND ${filepath} ${CMAKE_BINARY_DIR} found)
  18. if (NOT found EQUAL 0)
  19. set(SOURCE_FILES ${SOURCE_FILES} ${filepath} CACHE STRING "Source Files" FORCE)
  20. endif ()
  21. endforeach ()
  22. endmacro()
  23. function(JOIN VALUES GLUE OUTPUT)
  24. string(REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
  25. string(REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
  26. set(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
  27. endfunction()
  28. global_set(CMAKE_C_FLAGS "")
  29. global_set(CMAKE_CXX_FLAGS "")
  30. global_set(LDFLAGS "")
  31. global_set(CMAKE_EXE_LINKER_FLAGS "")
  32. global_set(CMAKE_SHARED_LINKER_FLAGS "")
  33. global_set(CMAKE_MODULE_LINKER_FLAGS "")
  34. function(removeDuplicateSubstring stringIn stringOut)
  35. separate_arguments(stringIn)
  36. list(REMOVE_DUPLICATES stringIn)
  37. string(REPLACE ";" " " stringIn "${stringIn}")
  38. set(${stringOut} "${stringIn}" PARENT_SCOPE)
  39. endfunction()
  40. macro(add_compile_flags WHERE)
  41. JOIN("${ARGN}" " " STRING_ARGS)
  42. if (${WHERE} STREQUAL C)
  43. global_set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STRING_ARGS}")
  44. elseif (${WHERE} STREQUAL CXX)
  45. global_set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STRING_ARGS}")
  46. elseif (${WHERE} STREQUAL LD)
  47. global_set(LDFLAGS "${LDFLAGS} ${STRING_ARGS}")
  48. global_set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${STRING_ARGS}")
  49. global_set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${STRING_ARGS}")
  50. global_set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${STRING_ARGS}")
  51. elseif (${WHERE} STREQUAL BOTH)
  52. add_compile_flags(C ${ARGN})
  53. add_compile_flags(CXX ${ARGN})
  54. elseif (${WHERE} STREQUAL ALL)
  55. add_compile_flags(C ${ARGN})
  56. add_compile_flags(CXX ${ARGN})
  57. add_compile_flags(LD ${ARGN})
  58. else ()
  59. message(FATAL_ERROR "add_compile_flags - only support: C, CXX, BOTH, LD, ALL")
  60. endif ()
  61. endmacro()