如何在CMake的用户包注册表中支持多个包版本?

dcm*_*m88 5 cmake

我试图了解如何使用CMake 用户包注册表来支持多个构建,例如调试和发布构建。

我有一个 package1,它可以正确调用,以便它使用 CMake 的用户包注册表export(PACKAGE package1)注册构建目录。然后,我继续创建 2 个单独的构建目录,一个用于调试,一个用于发布(请注意,我将调试构建的版本设为 3.0.2000000,而发布构建的版本为 3.0.1000000,因为我希望 CMake 更喜欢我的用例中的调试版本)。正如预期的那样,每个构建都在注册表中注册了一个项目:

> ls ~/.cmake/packages/package1/
212e973d0f1858e4bdf95b9d105bed5a  78094ed9b729d420c3f782cd8e668e64
Run Code Online (Sandbox Code Playgroud)

现在,我在另一个项目 package2 中使用它,find_package(package1 3.0.740)但它只能在发布版本中找到该项目。我尝试在调用后立即检查package1_CONSIDERED_CONFIGS和,但仍然只有发布版本的配置和版本。package1_CONSIDERED_VERSIONSfind_package

package2的CMakeLists.txt文件中的代码:

SET(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC)

message("CMAKE_FIND_PACKAGE_SORT_ORDER="
        "${CMAKE_FIND_PACKAGE_SORT_ORDER}")
message("CMAKE_FIND_PACKAGE_SORT_DIRECTION="
        ${CMAKE_FIND_PACKAGE_SORT_DIRECTION}")
find_package(package1 3.0.740)

message("Considered Configs:  ${package1_CONSIDERED_CONFIGS}")
message("Considered Versions: ${package1_CONSIDERED_VERSIONS}")
Run Code Online (Sandbox Code Playgroud)

CMake运行以上代码的结果:

cmake ../..
-- Using link pool size - 16 jobs
CMAKE_FIND_PACKAGE_SORT_ORDER=NATURAL
CMAKE_FIND_PACKAGE_SORT_DIRECTION=DEC
Considered Configs:  /path/to/package1/Release/package1Config.cmake
Considered Versions: 3.0.1000000
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?用户注册表应该如何使用?