# add `-Werror` to the current directory's `COMPILE_OPTIONS`
add_compile_options(-Werror)
# retrieve a copy of the current directory's `COMPILE_OPTIONS`
get_directory_property(old_dir_compile_options COMPILE_OPTIONS)
# modify the actual value of the current directory's `COMPILE_OPTIONS` (copy from above line remains unchanged). subdirectories inherit a copy of their parent's `COMPILE_OPTIONS` at the time the subdirectory is processed.
add_compile_options(-Wno-error)
# add you subdirectory (whichever way you do it)
# add_subdirectory(external ...)
# FetchContent_MakeAvailable(...)
# restore the current directory's old `COMPILE_OPTIONS`
set_directory_properties(PROPERTIES COMPILE_OPTIONS "${old_dir_compile_options}")
1条答案
按热度按时间lf5gs5x21#
CMake 2.34+方案
如果项目所需的最低CMake版本等于或高于v3.24,则可以使用the
CMAKE_COMPILE_WARNING_AS_ERROR
variable:此变量用于初始化所有目标上的
COMPILE_WARNING_AS_ERROR
属性。因此,只需在每个变量作用域的顶部将变量设置为所需的值,您希望在该作用域中使用特定的值。CMake非缓存变量的作用域为目录和函数。
对于外部项目的变量作用域的特定情况,* 如果您使用
add_subdirectory
* 添加它,我假设您不希望触及外部项目的CMakeLists.txt文件,因此您可以使用函数 Package 对add_subdirectory
的调用,并在函数内设置变量,然后调用函数。此方法有几个优点:
--compile-no-warning-as-error
命令行标志,当dev在CMakeLists.txt文件中设置该变量/target-property时,用户可以使用该标志来禁用该变量的任何效果。3.24之前版本的解决方案:如果通过
add_subdirectory
或FetchContent
添加外部目录在
proj
子目录下的CMakeLists.txt文件中,执行以下操作文件:
COMPILE_OPTIONS
add_compile_options
get_directory_property
set_directory_properties
。如果通过
ExternalProject_Add
添加您可能不需要做任何事情,除非外部项目本身正在添加
-Werror
,在这种情况下,我不知道您是否可以对此做任何事情。强制性警告/备注:
-Werror
是gcc和friends(clang等)的标志。如果你想支持MSVC,你需要通过if(...)
或生成器表达式来放置保护。-Werror
并不是没有争议的。如果您希望支持其他用户使用您的项目,并且希望满足争论的双方,请使用某种机制来保护CMake选项后面的这些配置行,或者将它们隔离到您的本地版本中。