プロジェクトでは非常に厳しい警告が使用されていますが、Qt5によって生成されたmocファイルはこれらの警告に違反するコードを生成します。明らかに警告をグローバルにオフにすることはできますが、私はautomocファイルの警告を抑制するだけです。例えばどのようにしてcmakeにautomocファイルのコンパイラ定義を追加するのですか
:以下
In file included from /Users/stebro/client/build/NotificationServer/Notification_automoc.cpp:2:
/Users/stebro/client/build/NotificationServer/moc_NotificationServer.cpp:100:18: error: dereference of type '_t *' (aka 'void (carbonite::NotificationServer::**)(const QByteArray &, const QString, const QVariant)') that was reinterpret_cast from type 'void **' has undefined behavior [-Werror,-Wundefined-reinterpret-cast]
if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&NotificationServer::notificationQueued)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
は動作しません:
set_property(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
PROPERTY COMPILE_DEFINITIONS -Wundefined-reinterpret-cast
)
cmakeのは文句:
set_property DIRECTORY scope provided but requested directory was not
found. This could be because the directory argument was invalid or, it is
valid but has not been processed yet.
私が使用することはできませんSET_PROPERTY(FILEを...) makefileがビルドされた時点でautomocされたファイルの包括的なリストがないので(おそらくGLOBingはwoしませんrkのいずれか)。ビルドによって生成されるすべてのmocファイルのリストを手作業で管理したくはありません。
あなたがこの質問をしたので、あなたはそれを回避する方法を見つけましたか?私は現在、同じ問題を抱えています。 – Corristo
@Corristo:私たちはQt 5.7に移行しました。私たちはもうこの問題を抱えていません(おそらく、Qtのautomocが彼らの行動を取り除いたでしょう)。 clang/OSX環境で実行している場合は、コンパイル行に-Iの代わりに-isystem を使用することで、「システム」ヘッダーに対して警告を表示しないようにすることができます。 $ {CMAKE_CURRENT_BINARY_DIR}をシステムパスとしてインクルードするものとして指定することができます。 –
@Corristo:実際には、私はmisspoke(私は私の元の投稿の日付をチェックしました - このコメントは、私の現在のプロジェクトではなく、以前の私のものでした)。私は残念ながら、Qtの悪い動作をカバーするためにすべてのコードに対してグローバル抑制を設定するだけで、この問題を回避しました。下の私の答えを見てください。 –