CMake 中静态库子项目的不同警告级别(尽管 target_compile_options)[重复]

问题描述 投票:0回答:1

我有一个像这样的CMakeLists.txt:

project(MyProject)
add_subdirectory(SomeLibrary)
add_executable(MyProject ${SRC_FILES})
target_compile_options(MyProject PRIVATE -Werror -Wall)
target_link_libraries(MyProject SomeLibrary)

其中

SomeLibrary
是第 3 方库(作为 git 子模块链接),无法使用
-Werror -Wall

进行构建

我想使用

-Werror -Wall
构建我的项目,但禁用子项目的
-Werror
。我怎样才能做到这一点?

我看到了一个相关问题,但这涵盖了直接通过

CMAKE_CXX_FLAGS
设置标志的情况 - 而不是
target_compile_options

c++ cmake
1个回答
1
投票

回答我自己的问题(感谢@Friedrich为我指明了正确的方向):

事实证明

target_compile_options
确实完成了每个目标的所有工作,而我只是误读了编译输出。这些错误来自 3rdparty 库公开的标头,该库包含在我自己的项目中。因此,第三方库构建得很好,因为它是在没有
-Werror
的情况下构建的,但我的主项目(使用
_Werror
构建的)失败了。

我想解决这个问题的唯一方法是:

  • 自行修复有问题的标头(并通知维护者/制作 PR)。
  • 使用编译器特定的
    #pragma
    指令(MSVC 上的
    #pragma GCC diagnostic ignored
    #pragma warning
    )在包含有问题的标头时禁用特定警告。
© www.soinside.com 2019 - 2024. All rights reserved.