CMake 目标文件向链接库添加奇怪的后缀

CMake targets file adds weird suffix to linked libraries

我有一个项目 Foo link 的库 curlthreadsjsoncpp。我构建 Foo 并生成一个 FooTargets.cmake 目标文件,我可以在我的项目 Bar 到 link 中使用它(使用 find_package(Foo REQUIRED) 然后 Foo::Foo).

现在这个 FooTargets.cmake 以一种奇怪的方式 links curlthreads:

INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:CURL::libcurl::@<0x56344f65d140>>;
$<LINK_ONLY:Threads::Threads::@<0x56344f65d140>>;$<LINK_ONLY:JsonCpp::JsonCpp>;

即出于某种原因,它添加了这个奇怪的 @<0x56344f65d140>

但是,在配置项目 Bar 时,出现以下错误:

CMake Error at bar/CMakeLists.txt:13 (add_executable):
  Target "bar" links to target "CURL::libcurl::@<0x55c57ad49530>"
  but the target was not found.  Perhaps a find_package() call is missing for
  an IMPORTED target, or an ALIAS target is missing?


CMake Error at bar/CMakeLists.txt:13 (add_executable):
  Target "bar" links to target "Threads::Threads::@<0x55c57ad49530>"
  but the target was not found.  Perhaps a find_package() call is missing for
  an IMPORTED target, or an ALIAS target is missing?

请注意,当 运行 在我的 CI 上执行相同的步骤时,似乎就可以了。另外,如果我手动编辑 FooTargets.cmake 并删除 @<0x55c57ad49530>,它工作正常。

为什么要附加这个 @<0x55c57ad49530>,例如JsonCpp没有?

这发生在 CMake 3.16.3 版中。较新版本的 CMake 似乎没有这个问题,这解释了为什么 CI 没问题。