Currently GCC has no way of suppressing this warning. And flycheck has no way to ignore errors without touching its internals.
Here is a hack that works for gcc:
; ignore gcc "#pragma once" warning
(with-eval-after-load "flycheck"
(eval-when-compile (require 'flycheck)) ; for flycheck-error struct
(defun my-filter-pragma-once-in-main (orig-fun errors)
(dolist (err errors)
(-when-let (msg (flycheck-error-message err))
(setf (flycheck-error-message err)
(if (string-match-p "#pragma once in main file" msg) nil msg))))
(funcall orig-fun errors))
(advice-add 'flycheck-sanitize-errors :around #'my-filter-pragma-once-in-main))
For completeness, @grepcake's answer for clang:
; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
(setq flycheck-clang-warnings `(,@flycheck-clang-warnings
"no-pragma-once-outside-header")))