【发布时间】:2022-09-27 19:04:45
【问题描述】:
我是 cmake 的新手,并使用 qt creator 提供的脚手架制作了一个 cmake 项目。我以源代码形式添加了一个库(assimp)。在使用默认工具包 (mingw) 编译我的项目时,我收到了以下错误:
error: ignoring \'#pragma warning \' [-Werror=unknown-pragmas]
我知道标志 \"-Werror=unknown-pragmas\" 要求编译器将未知的编译指示视为错误。 Assimp 有许多 gcc 不理解的编译指示指令,所以我不想将该标志传递给编译器。我查看了设置,但找不到设置标志的位置。如何禁用它以便我的程序编译?
[编辑]: 我搜索了 Assimp 库的 cmake 文件,找不到罪魁祸首编译器标志。这让我觉得它与 qt 在调用它时传递给 cmake 的内容有关。在 Projects->Build Settings->Cmake->Initial Configuration 中,我发现:
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
这意味着什么?
[编辑]:我在 Assimp 中发现了一个缓存变量,它可以将警告作为错误启用。原谅我看的不够好。
assimp/code/cmakelists.txt 中的相关代码:
IF (ASSIMP_WARNINGS_AS_ERRORS)
MESSAGE(STATUS \"Treating all warnings as errors (for assimp library only)\")
IF (MSVC)
TARGET_COMPILE_OPTIONS(assimp PRIVATE /W4 /WX)
ELSE()
TARGET_COMPILE_OPTIONS(assimp PRIVATE -Wall -Werror)
ENDIF()
ENDIF()
-
你找不到
unkown-pragmas最有可能被设置,因为它没有明确设置。它是-Wall -Werror(也许还有其他人)godbolt.org/z/xqdj4on3E 的一部分 -
一个好的做法是创建单独的目标,它只处理编译标志,所有其他目标都将链接到。我recommend watch this 涵盖了这个主题(和其他主题)。