The debug, optimized and general keywords are from very old CMake days. So old that most folks are not even aware they exist. They should not be used in any project today. I also recommend you don’t name a target any of those specific names, for reasons like the one you’re posting about here. All three are not good names for a target anyway, and general in particular is overly… general.
Sometimes we do not have control over naming. For (real life) example, there might be a schema file general.xsd, then a framework must generate a library project named general.
The general, debug, and optimized keywords are meaningful only in target_link_libraries arguments (and maybe link_libraries). They are still used by find modules, both upstream and in the wild, through SelectLibraryConfigurations, in order to report Foo_LIBRARIES as a single result variable:
In general such legacy result variables from find modules are not expected to have generator expressions in them. I don’t think we can stop supporting this use case, as it was pervasive at one time and likely has a huge legacy ecosystem.
The above-suggested $<1:general> is a good workaround to prevent target_link_libraries from treating it as a keyword.