#cmake #windows-10 #protocol-buffers #android-auto #protobuf-c
Вопрос:
Я пытаюсь создать проект aasdk на компьютере с Windows 10. Для этого я пытаюсь выполнить следующие команды в корневом каталоге репозитория git:
mkdir buildDir
cd buildDir
cmake ..
cmake --build . --config Release
Очевидно, что последняя команда-это та, которая терпит неудачу. При выполнении этой команды я получаю следующий вывод:
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
-- Found libusb-1.0:
-- - Includes: C:/libusb-master/x64/Release
-- - Libraries: C:/libusb-master/x64/Release/lib/libusb-1.0.lib
-- Configuring done
-- Generating done
-- Build files have been written to: C:/aasdk-development/buildDir
Microsoft (R) Build Engine version 16.8.3 39993bd9d for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
C:Program Files (x86)Microsoft Visual Studio2019CommunityMSBuildMicrosoftVCv160Microsoft.CppCommon.targets(200
,5): warning MSB8062: Custom build for item "C:aasdk-developmentbuildDirCMakeFilesb2b8e2a3c1aae1e014a7c3c3f8aadde7AVCha
nnelData.pb.h.rule" specifies invalid path "C:aasdk-developmentbuildDiraasdk_protoprotobuf::protoc" as an additional dep
endency. This may cause incremental build to work incorrectly. [C:aasdk-developmentbuildDiraasdk_protoaasdk_proto.vcxpro
j]
...
Running cpp protocol buffer compiler on C:/aasdk-development/aasdk_proto/AVChannelData.proto
The filename, directory name, or volume label syntax is incorrect.
C:Program Files (x86)Microsoft Visual Studio2019CommunityMSBuildMicrosoftVCv160Microsoft.CppCommon.targets(238
,5): error MSB8066: Custom build for 'C:aasdk-developmentbuildDirCMakeFilesb2b8e2a3c1aae1e014a7c3c3f8aadde7AVChannelDat
a.pb.h.rule;...' exited
with code 123. [C:aasdk-developmentbuildDiraasdk_protoaasdk_proto.vcxproj]
Где ...
одно и то же сообщение повторяется для каждого файла *.proto внутри aasdk_proto
каталога. Из того, что я могу сказать, кажется, что он считает некоторые пути недействительными. Чего я не могу сказать, так это какие пути и каким образом они недействительны.
После первого комментария я решил проверить, откуда он берет эти пути. Ниже приведено содержимое CMakeLists.txt
для protobuf, найденное в aasdk_proto
каталоге:
include(FindProtobuf)
find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIR})
file(GLOB_RECURSE proto_files ${CMAKE_CURRENT_SOURCE_DIR}/*.proto)
protobuf_generate_cpp(proto_sources proto_headers ${proto_files})
add_library(aasdk_proto SHARED ${proto_headers} ${proto_sources})
target_link_libraries(aasdk_proto ${PROTOBUF_LIBRARIES})
Интерес представляет 5-я строка , в которой перечислены все файлы *.proto в соответствующем каталоге перед вызовом protobuf_generate_cpp
, та часть, которая, как я полагаю, вызывает ошибки.
Добавление message(STATUS ProtoFiles: ${proto_files})
после строки 5 для печати путей дало правильные значения, по крайней мере, на мой взгляд:
C:/aasdk-development/aasdk_proto/AbsoluteInputEventData.proto;C:/aasdk-development/aasdk_proto/AbsoluteInputEventData.proto;...
Я заменил косую черту на обратную косую черту просто для смеха, так как это нравится Windows, но это не сработало.
Комментарии:
1.
"C:aasdk-developmentbuildDiraasdk_protoprotobuf::protoc"
Это не похоже на правильный путь!2. Я согласен, но опять же, насколько я знаю, это может быть нормальным выходом CMake/protobuf. Несмотря на это, я не думаю, что знаю, что проверять. Смотрите мою правку.
3. Удалять
include(FindProtobuf)
. Подобные сценарииFindXXX.cmake
должны включаться только черезfind_package
, что вы уже делаете.