forcing find_package to search only for the exact same build type than the calling target

Hi, I build targets with different possible build types:

  • Debug (with my own flags)
  • Release (with my own flags)
  • Custom, with a given name

I observed the following behavior, which, as far as I understand, is the default CMake one.

Let say I have a target A which is a static library and a target B that is an application, linking A.

If I build and install A in Debug with a proper configuration file, I get a ATargets-debug.cmake file, that references /Debug/libA.a.

Now I build B in Release, using find_package(A) in my CMakeLists.txt.

B, compiled in Release, gets linked with A compiled in Debug, which I’d like not to.

Actually I stumbled on that from an error I got when I had deleted /Debug/libA.a but forgot to delete also ATargets-debug.cmake. Even if /Release/libA.a exists, I cannot configure for B anymore as the find_package is looking for /Release/libA.a AND /Debug/libA.a.

Thus my question is: is there a way, when using find_package to look only for the exact same build type? (based solely on its name, for simplification)?

(NB I exhumed an old question slightly related to the subject: find_package and build configuration).


MAP_IMPORTED_CONFIG_CONFIG might be able to help? I’m not sure if there’s a way here though off hand.