macro(LOG line) message(STATUS ${line}) file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/AbsPathTest.txt "${line}\n") endmacro(LOG line) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/AbsPathTest.txt "test\n") set(path1 "/abs/unix") set(path2 "../rel") set(path3 ${CMAKE_ROOT}) message(STATUS "dos: ${path3}") macro(GET_ABS_PATH _abs_filename _filename) IF(${_filename} MATCHES "^/.+") SET(${_abs_filename} ${_filename}) ELSE(${_filename} MATCHES "^/.+") IF(${_filename} MATCHES "^[a-zA-Z]:\\\\") SET(${_abs_filename} ${_filename}) ELSE(${_filename} MATCHES "^[a-zA-Z]:\\\\") SET(${_abs_filename} ${CMAKE_CURRENT_SOURCE_DIR}/${_filename}) ENDIF(${_filename} MATCHES "^[a-zA-Z]:\\\\") ENDIF(${_filename} MATCHES "^/.+") endmacro(GET_ABS_PATH) get_abs_path(abs ${path1}) log(${path1}) log(${abs}) get_abs_path(abs ${path2}) log(${path2}) log(${abs}) get_abs_path(abs "${path3}") log(${path3}) log(${abs})