24

main question: Is there a configuration for cmake, to show or ignore compiler warnings/errors only from a certain directory?

alternative solution: How can I toggle this in QtCreator?

background / motivation: I'm working on a bigger CMake-project and want to focus on warnings and errors only from my subproject. I'm working with QtCreator and it annoys me to look for "my" errors/warnings under a pile of foreign ones.

jww
  • 97,681
  • 90
  • 411
  • 885
hardmooth
  • 1,202
  • 2
  • 19
  • 36

3 Answers3

29

You can set compiler warning options in CMake at least for certain target or certain files.

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

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

It is also possible to set the options per-folder basis by separating your project as subproject, add it using add_subdirectory(your_project) and in your project CMakeLists.txt use add_definitions(...).

From CMake documentation:

add_definitions Adds flags to the compiler command line for sources in the current directory and below.

ronkot
  • 5,915
  • 4
  • 27
  • 41
  • Interesting. The `set_source_files_properties()` is per directory. So all named targets are affected, whatever the project it's in... – Alexis Wilke May 15 '20 at 23:09
  • _Note: This property [a.k.a. COMPILE_FLAGS] has been superseded by the COMPILE_OPTIONS property._ In case you are using newer versions of cmake. – Alexis Wilke May 15 '20 at 23:12
10

Basically the same as @ronkot's answer. But don't need add_subdirectory for certain directory, using set_source_files_properties with file(GLOB_RECURSE ...) also works.

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

set_source_files_properties(
  ${SRC_DIR}
  PROPERTIES
  COMPILE_FLAGS "-w"
)
JustWe
  • 4,250
  • 3
  • 39
  • 90
2

Expanding on @ronkot answer, the recommended target-based approach would be:

target_compile_options(your_target SCOPE compiler-warning-options)

Where SCOPE is PUBLIC|INTERFACE|PRIVATE, and compiler-warning-options are actual compiler warning options, such as -Wall. See cmake's docs for more info.

In general, prefer a target-based approach with modern CMake (3.0+) rather than a directory-based approach.

Timor Gruber
  • 312
  • 2
  • 4
  • 15