Here is my solution:
Put below code in your .emacs or .spacemacs.
You'll need manually put upper-case marker name and file name at line: evil-add-to-alist.
I also modified evil-goto-mark to fix a bug that introduced by set evil-markers-alist directly. The old code assume when the marker is a cons, the buffer has been closed. (when buffer closed, it convert marker to cons).
(setq alist (default-value 'evil-markers-alist))
(evil-add-to-alist 'alist ?E '("/path/to/yourfile" . 1))
(setq-default evil-markers-alist alist)
(evil-define-command evil-goto-mark (char &optional noerror)
"Go to the marker specified by CHAR."
(interactive (list (read-char)))
(let ((marker (evil-get-marker char)))
(switch-to-buffer (marker-buffer marker))
(goto-char (marker-position marker)))
(when (or (and (find-buffer-visiting (car marker))
(switch-to-buffer (find-buffer-visiting (car marker)) )
(and (y-or-n-p (format "Visit file %s again? "
(find-file (car marker))))
(goto-char (cdr marker))))
(user-error "Marker `%c' is not set%s" char
(if (evil-global-marker-p char) ""
" in this buffer"))))))