我有一个像这样的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
。
回答我自己的问题(感谢@Friedrich为我指明了正确的方向):
事实证明
target_compile_options
确实完成了每个目标的所有工作,而我只是误读了编译输出。这些错误来自 3rdparty 库公开的标头,该库包含在我自己的项目中。因此,第三方库构建得很好,因为它是在没有 -Werror
的情况下构建的,但我的主项目(使用 _Werror
构建的)失败了。
我想解决这个问题的唯一方法是:
#pragma
指令(MSVC 上的 #pragma GCC diagnostic ignored
或 #pragma warning
)在包含有问题的标头时禁用特定警告。