Здравствуйте!
Есть кастомная команда (для обработки protoфайлов, но, наверное, это не важно)
add_custom_command(
OUTPUT ${OUTPUT_PB_SOURCE} ${OUTPUT_PB_HEADER} ${OUTPUT_GRPC_SOURCE} ${OUTPUT_GRPC_HEADER}
COMMAND ${UMBA_PROTOBUF_PROTOC}
ARGS
--grpc_out "${OUTPUT_PROTO_FILE_PATH}"
--cpp_out "${OUTPUT_PROTO_FILE_PATH}"
"-I${PROTO_FILE_PATH}"
${PROTOC_OPTS}
--plugin=protoc-gen-grpc="${GRPC_PROTOC_CPP_PLUGIN_EXECUTABLE}"
"${PROTO_FILE}"
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/fix_cpp_keywords.cmd "${OUTPUT_PB_SOURCE}" # cmd /C
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/fix_cpp_keywords.cmd "${OUTPUT_PB_HEADER}" # cmd /C
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/fix_cpp_keywords.cmd "${OUTPUT_GRPC_SOURCE}" # cmd /C
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/fix_cpp_keywords.cmd "${OUTPUT_GRPC_HEADER}" # cmd /C
DEPENDS "${PROTO_FILE}")
| | fix_cpp_keywords.cmd |
| | @echo off
powershell "((Get-Content -path \"%1\" -Raw) -replace 'namespace public {','namespace public_ {') | Set-Content -Path \"%1\""
powershell "((Get-Content -path \"%1\" -Raw) -replace '::public::','::public_::') | Set-Content -Path \"%1\""
|
| | |
При сборке в VSCode с использованием Ninja всем проходит нормально. Когда генерю проект для MSVS, часть файлов нормально обрабатывается командой
fix_cpp_keywords.cmd, а часть — нет. Причем стабильно, одни и те же файлы сбоят — первые два обрабатываются нормально, а потом начинаются проблемы.
Set-Content : Процесс не может получить доступ к файлу бла-бла
+ CategoryInfo : NotSpecified: (:) [Set-Content], IOException
+ FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.SetContentCommand
Есть подозрение, что это из-за параллельной сборки, но не факт.
Добавил в скрипт CMake:
if (CMAKE_GENERATOR MATCHES "Visual Studio")
message(STATUS "Disable parallel jobs using '${CMAKE_GENERATOR}' generator for target '${TARGET}'")
set_target_properties(${TARGET} PROPERTIES DISABLE_PARALLEL_BUILD TRUE)
set_target_properties(${TARGET} PROPERTIES
VS_GLOBAL_MaxCpuCount 1
VS_GLOBAL_EnableParallelBuild false
VS_GLOBAL_Parallel 0
)
# Добавляем кастомные свойства MSBuild для цели
set_target_properties(${TARGET} PROPERTIES
VS_GLOBAL_ClCompileUseMultiToolTask false
VS_GLOBAL_LinkUseMultiToolTask false
VS_GLOBAL_LibUseMultiToolTask false
)
endif()
В проект .vcxproj добавляется
<PropertyGroup Label="Globals">
<ProjectGuid>{2B2E3FC2-2432-377C-AC32-04D505C8DED0}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<ClCompileUseMultiToolTask>false</ClCompileUseMultiToolTask>
<EnableParallelBuild>false</EnableParallelBuild>
<LibUseMultiToolTask>false</LibUseMultiToolTask>
<LinkUseMultiToolTask>false</LinkUseMultiToolTask>
<MaxCpuCount>1</MaxCpuCount>
<Parallel>0</Parallel>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<Platform>x64</Platform>
<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
</PropertyGroup>
Но ничего не изменилось, так и не собирается, ровно всё то же.
Кто-нибудь сталкивался с подобным?