-function(add_compiler_flags)
- set(flags_list "")
+# add_target_property
+# Adds one or more values to the specified property of the specified target.
+# Note that there are properties which require (semicolon-separated) lists,
+# while others require space-separated strings. The function has a list of
+# properties of the former variety and handles the values accordingly
+function(add_target_property _module _propname)
+ list(APPEND _list_properties COMPILE_DEFINITIONS INCLUDE_DIRECTORIES)
+ set(_newvalue "")
+ get_target_property(_oldvalue ${_module} ${_propname})
+ if(_oldvalue)
+ set(_newvalue ${_oldvalue})
+ endif()
+ list(FIND _list_properties ${_propname} _list_index)
+ if(NOT _list_index EQUAL -1)
+ # list property
+ list(APPEND _newvalue ${ARGN})
+ else()
+ # string property
+ foreach(_flag ${ARGN})
+ set(_newvalue "${_newvalue} ${_flag}")
+ endforeach()
+ endif()
+ set_property(TARGET ${_module} PROPERTY ${_propname} ${_newvalue})
+endfunction()
+
+# Wrapper functions for the important properties, using add_target_property
+# where appropriate.
+# Note that the functions for string properties take a single string
+# argument while those for list properties can take a variable number of
+# arguments, all of which will be added to the list
+#
+# Examples:
+# add_compile_flags("-pedantic -O5")
+# add_target_link_flags(mymodule "-s --fatal-warnings")
+# add_target_compile_flags(mymodule "-pedantic -O5")
+# add_target_compile_definitions(mymodule WIN32 _WIN32 INLINE=inline)
+# add_target_include_directories(mymodule include ../include)
+# add_compile_flags_language("-std=gnu99" "C")
+function(add_compile_flags _flags)
+ if(${ARGC} GREATER 1)
+ message(STATUS "Excess arguments to add_compile_flags! Args ${ARGN}")
+ endif()
+ # Adds the compiler flag to both CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" PARENT_SCOPE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" PARENT_SCOPE)
+ set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${_flags}" PARENT_SCOPE)
+endfunction()
+
+function(add_compile_flags_language _flags _lang)
+ if(NOT ${ARGC} EQUAL 2)
+ message(STATUS "Wrong arguments to add_compile_flags_language! Args ${ARGN}")
+ endif()
# Adds the compiler flag to both CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
- foreach(flag ${ARGN})
- set(flags_list "${flags_list} ${flag}")
- endforeach()
+ set(CMAKE_${_lang}_FLAGS "${CMAKE_${_lang}_FLAGS} ${_flags}" PARENT_SCOPE)
+endfunction()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flags_list}" PARENT_SCOPE)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flags_list}" PARENT_SCOPE)
+function(add_target_compile_flags _module _flags)
+ if(${ARGC} GREATER 2)
+ message(STATUS "Excess arguments to add_target_compile_flags! Module ${_module}, args ${ARGN}")
+ endif()
+ add_target_property(${_module} COMPILE_FLAGS ${_flags})
endfunction()
-function(add_linkerflag MODULE _flag)
- set(NEW_LINKER_FLAGS ${_flag})
- get_target_property(LINKER_FLAGS ${MODULE} LINK_FLAGS)
- if(LINKER_FLAGS)
- set(NEW_LINKER_FLAGS "${LINKER_FLAGS} ${NEW_LINKER_FLAGS}")
+function(add_target_link_flags _module _flags)
+ if(${ARGC} GREATER 2)
+ message(STATUS "Excess arguments to add_target_link_flags! Module ${_module}, args ${ARGN}")
endif()
- set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${NEW_LINKER_FLAGS})
+ add_target_property(${_module} LINK_FLAGS ${_flags})
endfunction()
-macro(set_unicode)
- add_definitions(-DUNICODE -D_UNICODE)
- set(IS_UNICODE 1)
-endmacro()
+function(add_target_compile_definitions _module)
+ add_target_property(${_module} COMPILE_DEFINITIONS ${ARGN})
+endfunction()
+
+function(add_target_include_directories _module)
+ add_target_property(${_module} INCLUDE_DIRECTORIES ${ARGN})
+endfunction()