Сообщение CMake, MSVS, add_custom_command и параллельная сборка от 09.01.2026 17:33
Изменено 09.01.2026 17:34 Marty
CMake, MSVS, add_custom_command и параллельная сборка
Здравствуйте!
Есть кастомная команда (для обработки protoфайлов, но, наверное, это не важно)
При сборке в VSCode с использованием Ninja всем проходит нормально. Когда генерю проект для MSVS, часть файлов нормально обрабатывается командой fix_cpp_keywords.cmd, а часть — нет. Причем стабильно, одни и те же файлы сбоят — первые два обрабатываются нормально, а потом начинаются проблемы.
Есть подозрение, что это из-за параллельной сборки, но не факт.
Добавил в скрипт 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 добавляется
Но ничего не изменилось, так и не собирается, ровно всё то же.
Кто-нибудь сталкивался с подобным?
Есть кастомная команда (для обработки 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 | |
| |
При сборке в 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>Но ничего не изменилось, так и не собирается, ровно всё то же.
Кто-нибудь сталкивался с подобным?
CMake, MSVS, add_custom_command и параллельная сборка
Здравствуйте!
Есть кастомная команда (для обработки protoфайлов, но, наверное, это не важно)
При сборке в VSCode с использованием Ninja всем проходит нормально. Когда генерю проект для MSVS, часть файлов нормально обрабатывается командой fix_cpp_keywords.cmd, а часть — нет. Причем стабильно, одни и те же файлы сбоят — первые два обрабатываются нормально, а потом начинаются проблемы.
Есть подозрение, что это из-за параллельной сборки, но не факт.
Добавил в скрипт CMake:
В проект .vcxproj добавляется
Но ничего не изменилось, так и не собирается, ровно всё то же.
Кто-нибудь сталкивался с подобным?
Есть кастомная команда (для обработки 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 | |
| |
При сборке в 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>Но ничего не изменилось, так и не собирается, ровно всё то же.
Кто-нибудь сталкивался с подобным?