如何在CMake中为外部项目目录选择性启用/禁用-Werror参数?
在CMake中为指定目录设置编译参数例外规则的实现方法
当然可以实现,以下是具体操作方案:
步骤1:为根目录添加全局编译参数
在proj根目录的CMakeLists.txt中,为整个项目(后续例外目录除外)添加-Werror参数:
# 为根目录及默认子目录添加-Werror编译参数 add_compile_options(-Werror)
方法一:在例外目录中移除参数
进入proj/external目录,在其CMakeLists.txt开头添加代码,清除当前目录及子目录的-Werror选项:
# 获取当前目录的编译参数列表 get_directory_property(_current_compile_opts COMPILE_OPTIONS) # 移除-Werror参数 list(REMOVE_ITEM _current_compile_opts "-Werror") # 重新设置当前目录的编译参数属性 set_directory_properties(PROPERTIES COMPILE_OPTIONS "${_current_compile_opts}")
方法二:在根目录中临时取消参数后添加例外目录
如果不想修改external目录的CMake配置,可在根目录CMakeLists.txt中通过临时切换参数的方式实现:
# 先为全局添加-Werror add_compile_options(-Werror) # 保存当前编译参数,临时移除-Werror set(_original_compile_opts ${CMAKE_CXX_COMPILE_OPTIONS}) string(REPLACE "-Werror" "" CMAKE_CXX_COMPILE_OPTIONS "${CMAKE_CXX_COMPILE_OPTIONS}") # 添加例外子目录 add_subdirectory(external) # 恢复原来的全局编译参数 set(CMAKE_CXX_COMPILE_OPTIONS "${_original_compile_opts}")
注意事项
- 若仅针对C++语言设置参数,可将
add_compile_options替换为set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror"),移除操作也需对应调整为修改CMAKE_CXX_FLAGS。 - 建议使用CMake 3.10及以上版本,部分目录属性操作在旧版本中兼容性较差。
内容的提问来源于stack exchange,提问作者fmarkyy98
相关产品推荐
相关产品推荐

