使用 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