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}) macro(GET_ABS_PATH _abs_filename _filename) 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]:)?/.+") 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})