`SYSTEM` flag hides header warnings but not sources

Hi,

I’m using add_subdirectory via CPM to add a library:

CPMAddPackage(
    NAME JUCE
    GITHUB_REPOSITORY juce-framework/JUCE
    SYSTEM YES
)
target_link_libraries(${PROJECT_NAME}
    PRIVATE
        juce_osc
)

# Options to apply to my project but not the library
target_compile_options(${PROJECT_NAME} PRIVATE
    -Werror
    -Wextra
    -Wall
    -Wfloat-equal
    -Wconversion
    -Wparentheses
    -pedantic
    -Wunused-parameter
    -Wunused-variable
    -Wreturn-type
    -Wunused-function
    -Wredundant-decls
    -Wreturn-type
    -Wunused-value
    -Wswitch-default
    -Wuninitialized
    -Winit-self

    -Wcast-align
    -Wextra-semi
    -Wformat=2
    -Wmissing-include-dirs
    -Wsuggest-override
    -Wvla
    -Wformat-security
    -Wpointer-arith
    -Wundef
)

The SYSTEM flag is hiding a bunch of warnings from the external library. If I set SYSTEM to NO then more appear, but I am still seeing these for the library’s *.cpp source files:

In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.h:68,
                 from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:44:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCTypes.h:100:14: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  100 |        #if ! JUCE_UNIT_TESTS
      |              ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:47:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCTimeTag.cpp:86:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
   86 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:48:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCArgument.cpp:92:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
   92 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:49:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCAddress.cpp:409:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  409 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:50:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCMessage.cpp:110:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  110 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:51:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCBundle.cpp:122:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  122 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:52:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCReceiver.cpp:673:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  673 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
In file included from /REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/juce_osc.cpp:53:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCSender.cpp:346:5: error: "JUCE_UNIT_TESTS" is not defined, evaluates to 0 [-Werror=undef]
  346 | #if JUCE_UNIT_TESTS
      |     ^~~~~~~~~~~~~~~
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCTimeTag.cpp: In constructor ‘juce::OSCTimeTag::OSCTimeTag(juce::Time)’:
/REDACTED/.cpm-cache/juce/REDACTED/modules/juce_osc/osc/juce_OSCTimeTag.cpp:57:65: error: conversion from ‘long long unsigned int’ to ‘double’ may change value [-Werror=conversion]
   57 |     uint32 fractionalPart = uint32 (4294967.296 * (milliseconds % 1000));
      |  

How can I disable the warnings for the sources too? I tried target_compile_options(juce_osc INTERFACE -w), but that seems to apply to my project target too.

OK, I found this workaround, but it doesn’t seem be the intended way to solve this:

file(GLOB_RECURSE JUCE_SOURCES CONFIGURE_DEPENDS "${JUCE_SOURCE_DIR}/*.cpp")
set_source_files_properties(${JUCE_SOURCES} PROPERTIES COMPILE_FLAGS "-w")