Мне удалось создать минимальный рабочий пример проекта C ++, который использует Vcpkg диспетчер пакетов с Cmake .
В этом проекте я имею единую зависимость от Protobuf. Это не масштабируемые решения. (Или, по крайней мере, группа связанных концепций.)
Эмулировать это, я переместил файлы исходного кода в каталог, называемый примером-обязательным .
Однако я не знаю, где vcpkg.json Файл зависимости не должен быть. vcpkg.json расположен в корневом каталоге.
он строится, когда этот файл перемещается в пример-подлежащий каталогу . Похоже, это говорит о том, что правило состоит в том, что файл зависимостей должен быть расположен в том же каталоге, что и root cmakelists.txt .
Однако это может быть неправильным правилом. Это может быть , например, что -то другое, возможно, файл зависимости vcpkg.json должен быть помещен в один и тот же каталог, что и файл cmakelists.txt , если это Cmakelists.txt File определяет зависимость через Find_package . Onlighten?example-executable/
CMakeLists.txt
main.cpp
message.proto
vcpkg.json # ok here !
cmake-build.sh
< /code>
cmake-build.sh содержит команды, выполняемые для создания проекта:
#!/bin/bash
cmake -B build -S example-executable -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build
< /code>
The other files:
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(vcpkg-project-test CXX)
find_package(Protobuf REQUIRED)
set(CMAKE_CXX_STANDARD 23)
set(PROTO_FILES message.proto)
set(PROTO_GENERATE_DIR ${CMAKE_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${PROTO_GENERATE_DIR})
protobuf_generate_cpp(
PROTO_SRCS PROTO_HDRS ${PROTO_FILES}
)
add_library(
lib_proto
STATIC
${PROTO_SRCS}
)
target_include_directories(
lib_proto
PUBLIC
${Protobuf_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(
lib_proto
PUBLIC
${Protobuf_LIBRARIES}
)
add_executable(
a.out
main.cpp
)
target_link_libraries(
a.out
PRIVATE
lib_proto
protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite
)
< /code>
main.cpp
#include "message.pb.h"
int main() {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/795 ... ncies-file
В проекте C ++, который использует VCPKG и CMAKE, где должен быть размещен файл зависимостей? ⇐ C++
Программы на C++. Форум разработчиков
1744537810
Anonymous
Мне удалось создать минимальный рабочий пример проекта C ++, который использует Vcpkg диспетчер пакетов с Cmake .
В этом проекте я имею единую зависимость от Protobuf. Это не масштабируемые решения. (Или, по крайней мере, группа связанных концепций.)
Эмулировать это, я переместил файлы исходного кода в каталог, называемый примером-обязательным .
Однако я не знаю, где vcpkg.json Файл зависимости не должен быть. vcpkg.json расположен в корневом каталоге.
он строится, когда этот файл перемещается в пример-подлежащий каталогу . Похоже, это говорит о том, что правило состоит в том, что файл зависимостей [b] должен быть расположен в том же каталоге, что и root cmakelists.txt .
Однако это может быть неправильным правилом. Это может быть [/b], например, что -то другое, возможно, файл зависимости vcpkg.json должен быть помещен в один и тот же каталог, что и файл cmakelists.txt , если это Cmakelists.txt File определяет зависимость через Find_package . Onlighten?example-executable/
CMakeLists.txt
main.cpp
message.proto
vcpkg.json # ok here !
cmake-build.sh
< /code>
cmake-build.sh содержит команды, выполняемые для создания проекта:
#!/bin/bash
cmake -B build -S example-executable -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build
< /code>
The other files:
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(vcpkg-project-test CXX)
find_package(Protobuf REQUIRED)
set(CMAKE_CXX_STANDARD 23)
set(PROTO_FILES message.proto)
set(PROTO_GENERATE_DIR ${CMAKE_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${PROTO_GENERATE_DIR})
protobuf_generate_cpp(
PROTO_SRCS PROTO_HDRS ${PROTO_FILES}
)
add_library(
lib_proto
STATIC
${PROTO_SRCS}
)
target_include_directories(
lib_proto
PUBLIC
${Protobuf_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(
lib_proto
PUBLIC
${Protobuf_LIBRARIES}
)
add_executable(
a.out
main.cpp
)
target_link_libraries(
a.out
PRIVATE
lib_proto
protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite
)
< /code>
main.cpp
#include "message.pb.h"
int main() {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79571398/in-a-c-project-which-uses-vcpkg-and-cmake-where-should-the-dependencies-file[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия