【问题标题】:No CMakePredefinedTargets when using solution folders使用解决方案文件夹时没有 CMakePredefinedTargets
【发布时间】:2016-03-22 08:58:51
【问题描述】:

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

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_target_properties(MyProject PROPERTIES FOLDER "MyProjects")

我还自动启用了 CMakePredefinedTargets文件夹:

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

重置PREDEFINED_TARGETS_FOLDER 可以重命名文件夹但不能删除它。为 INSTALL 等设置 FOLDER 属性似乎也无效。

谢谢。

【问题讨论】:

  • 我已经对您的声明“重置PREDEFINED_TARGETS_FOLDER 无济于事”进行了测试。对我来说,重置有助于再次获得根级别的预定义目标(请参阅下面的答案)。那你可以试一试吗?如果它不起作用,您能否添加一些有关您的 CMakeLists.txt 或您的一般环境的详细信息?
  • 大家好,如果我想将两个(或更多)项目放在同一个文件夹中,我该怎么做?例如:假设我有两个项目(project1 和 project2),我希望在 Test 文件夹下拥有它们(如上例所示)?

标签: visual-studio cmake


【解决方案1】:

编辑:查看 CMake 代码后,我很确定您可以将 PREDEFINED_TARGETS_FOLDER 设置为 ""。我已经使用 CMake 3.3.2 和 VS2015 对其进行了测试

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "")

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

而且,如果是全局USE_FOLDERS 属性,如果ON,那么预定义的目标是硬连线的,总是被分组在PREDEFINED_TARGETS_FOLDER 文件夹中。所以设置 FOLDER 的例如属性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

【讨论】:

  • 我似乎误解了PREDEFINED_TARGETS_FOLDER 文档。它确实像你说的那样有效。谢谢。
  • @maranov 欢迎您。我想补充一点,我个人认为预定义目标的分组非常有用。我在自己的 CMake 项目中所做的是set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "_CMakePredefinedTargets")。前导下划线确保预定义的目标始终位于顶部。否则,这些文件夹会按字母顺序排序,有时很难在根级别的所有其他文件夹/项目的中间找到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多