使用 CMake 设置适用于所有目标的目标 VS_GLOBAL 属性
Set a target VS_GLOBAL property that applies to all targets using CMake
我想设置一个适用于 CMake 项目中所有目标的目标 属性。具体来说,我想在 Visual Studio 中禁用 vcpkg 集成。我可以通过以下方式逐个目标地进行:
set_target_properties(${mytarget} PROPERTIES VS_GLOBAL_VcpkgEnabled FALSE)
但我不知道如何为所有目标进行全局设置。
我偶然发现了类似的问题。我发现的解决方案涉及将属性设置为所有目标。
function(get_all_targets var)
set(targets)
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
set(${var} ${targets} PARENT_SCOPE)
endfunction()
macro(get_all_targets_recursive targets dir)
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
foreach(subdir ${subdirectories})
get_all_targets_recursive(${targets} ${subdir})
endforeach()
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
list(APPEND ${targets} ${current_targets})
endmacro()
set_target_properties(${all_targets} PROPERTIES VS_GLOBAL_VcpkgEnabled false)
基于此资源:https://newbedev.com/how-do-i-iterate-over-all-cmake-targets-programmatically
我想设置一个适用于 CMake 项目中所有目标的目标 属性。具体来说,我想在 Visual Studio 中禁用 vcpkg 集成。我可以通过以下方式逐个目标地进行:
set_target_properties(${mytarget} PROPERTIES VS_GLOBAL_VcpkgEnabled FALSE)
但我不知道如何为所有目标进行全局设置。
我偶然发现了类似的问题。我发现的解决方案涉及将属性设置为所有目标。
function(get_all_targets var)
set(targets)
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
set(${var} ${targets} PARENT_SCOPE)
endfunction()
macro(get_all_targets_recursive targets dir)
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
foreach(subdir ${subdirectories})
get_all_targets_recursive(${targets} ${subdir})
endforeach()
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
list(APPEND ${targets} ${current_targets})
endmacro()
set_target_properties(${all_targets} PROPERTIES VS_GLOBAL_VcpkgEnabled false)
基于此资源:https://newbedev.com/how-do-i-iterate-over-all-cmake-targets-programmatically