Почему find_package() работает при автономной сборке, но не работает, когда тот же проект включается через add_subdirectC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему find_package() работает при автономной сборке, но не работает, когда тот же проект включается через add_subdirect

Сообщение Anonymous »

У меня следующая структура проекта:

Код: Выделить всё

TopLevel/
-- CMakeLists.txt
-- SubLevel/
------ CMakeLists.txt
------ vcpkg/..               # I git cloned the vcpkg repo and bootstrapped it
------ vcpkg.json
где TopLevel содержит мой личный проект CMake, а SubLevel — еще один сторонний проект CMake, который я хотел бы создать вместе со своим собственным. Проект SubLevel использует vcpkg для обработки своих собственных зависимостей.
TopLevel CMakeLists.txt интегрирует подпроект следующим образом:

Код: Выделить всё

# TopLevel/CMakeLists.txt
cmake_minimum_required(VERSION 3.21)
project(MyProject)
add_subdirectory(SubLevel)
Проект подуровня пытается найти пакет fmt следующим образом:

Код: Выделить всё

# TopLevel/SubLevel/CMakeLists.txt
cmake_minimum_required(VERSION 3.21)
find_package(fmt CONFIG REQUIRED)
В файле vcpkg.json fmt указан как единственная зависимость.

Код: Выделить всё

# TopLevel/SubLevel/vcpkg.json
{
"name": "my-project",
"version": "1.0.0",
"dependencies": [
"fmt"
]
}
По какой-то причине запуск cmake работает ОТЛИЧНО, если я пытаюсь сделать это только в проекте SubLevel, но получаю сообщение об ошибке при попытке сделать это в проекте TopLevel:

Код: Выделить всё

cmake -B build \
-DCMAKE_TOOLCHAIN_FILE=/Users/my_name/sandbox/TopLevel/SubLevel/vcpkg/scripts/buildsystems/vcpkg.cmake
И получил сообщение об ошибке:

Код: Выделить всё

CMake Error at SubLevel/vcpkg/scripts/buildsystems/vcpkg.cmake:908 (_find_package):
Could not find a package configuration file provided by "fmt" with any of
the following names:

fmtConfig.cmake
fmt-config.cmake

Add the installation prefix of "fmt" to CMAKE_PREFIX_PATH or set "fmt_DIR"
to a directory containing one of the above files.  If "fmt" provides a
separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
SubLevel/CMakeLists.txt:6 (find_package)

-- Configuring incomplete, errors occurred!
Я также пытался переместить vcpkg.json в каталог TopLevel и «пересоздать» его, но безрезультатно.
Я впервые использую CMake, и в README подпроекта указано, что все, что мне нужно сделать, это добавить строку «add_subdirectory()», чтобы использовать его, поэтому я, возможно, начал не с той ноги и предположил, что все работает определенным образом, когда они не сделал. Было ли это следствием плохой документации?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»