使用CMake忽略/仅显示来自特定目录的错误/警告

nwo49xxi  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(158)

**main question:**cmake是否有一个配置,只显示或忽略来自某个目录的编译器警告/错误?
**替代方案:**如何在QtCreator中切换?
background / motivation:我正在做一个更大的CMake项目,希望只关注我的子项目中的警告和错误。我正在使用QtCreator,在一堆外来的错误/警告下寻找“我的”错误/警告让我很恼火。

r1zk6ea1

r1zk6ea11#

您可以在CMake中设置编译器警告选项,至少针对某些 * 目标 * 或某些 * 文件 *。

# For target
set_target_properties(your_project_name PROPERTIES COMPILE_FLAGS "...")

# For files
set_source_files_properties(
  ${list_of_your_files}
  PROPERTIES
  COMPILE_FLAGS "..."
)

字符串
也可以通过将项目分离为子项目来设置每个文件夹的选项,使用add_subdirectory(your_project)添加它,并在项目CMakeLists.txt中使用add_definitions(...)
来自CMake文档:
add_definitions在编译器命令行中为当前目录及其下的源代码添加标志。

0g0grzrc

0g0grzrc2#

基本上和@ronkot的答案一样。但是对于某些目录不需要add_subdirectory,使用set_source_files_propertiesfile(GLOB_RECURSE ...)也可以。

file(GLOB_RECURSE SRC_DIR "SRC_DIR/*.c" "SRC_DIR/*.h")

set_source_files_properties(
  ${SRC_DIR}
  PROPERTIES
  COMPILE_FLAGS "-w"
)

字符串

eimct9ow

eimct9ow3#

扩展@ronkot的答案,建议的基于目标的方法是:

target_compile_options(your_target SCOPE compiler-warning-options)

字符串
其中SCOPEPUBLIC|INTERFACE|PRIVATE,而compiler-warning-options是实际的编译器警告选项,例如-Wall。有关更多信息,请参见cmake's docs
一般来说,更喜欢使用现代CMake(3.0+)的基于目标的方法,而不是基于目录的方法。

dwbf0jvd

dwbf0jvd4#

这似乎可以正确地将选项添加到特定文件中,而不是像其他答案那样删除所有预设选项:

set_source_files_properties(
    "../src/io/filesystem/zip/ioapi.c"
    "../src/io/filesystem/zip/unzip.c"
    "../src/io/filesystem/zip/zip.c"
    PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS " -w"
)

字符串

相关问题