使用解决方案文件夹时没有CMakePredefinedTargets

mar*_*nov 5 cmake visual-studio

在CMake中使用VS解决方案文件夹时使用:

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_target_properties(MyProject PROPERTIES FOLDER "MyProjects")
Run Code Online (Sandbox Code Playgroud)

我也自动启用一个 CMakePredefinedTargets文件夹:

在此输入图像描述

有没有办法避免这种行为?

重置PREDEFINED_TARGETS_FOLDER可以重命名文件夹但不能删除它.设置FOLDERINSTALL等属性似乎也没有效果.

谢谢.

Flo*_*ian 4

编辑:在研究了 CMake 代码后,我很确定你可以设置PREDEFINED_TARGETS_FOLDER"". 我已经使用 CMake 3.3.2 和 VS2015 对其进行了测试

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "")
Run Code Online (Sandbox Code Playgroud)

预定义目标再次位于根级别。

并且,是的,如果全局USE_FOLDERS属性那么ON预定义目标被硬连接为始终分组在PREDEFINED_TARGETS_FOLDER文件夹中。所以设置FOLDEReg的属性INSTALL没有帮助。

作为参考,请查看cmGlobalVisualStudioGenerator.cxx在何处明确针对目标停用此行为ALL_BUILD

#if 0
    // Can't activate this code because we want ALL_BUILD
    // selected as the default "startup project" when first
    // opened in Visual Studio... And if it's nested in a
    // folder, then that doesn't happen.
    //
    // Organize in the "predefined targets" folder:
    //
    if (this->UseFolderProperty())
    {
        allBuild->SetProperty("FOLDER", this->GetPredefinedTargetsFolder());
    }     
#endif
Run Code Online (Sandbox Code Playgroud)