【问题标题】:How to organise my files using CMake?如何使用 CMake 组织我的文件?
【发布时间】:2011-10-28 19:34:31
【问题描述】:

在解决方案中我的代码组织方面,我在使用 CMake 时遇到了一些问题。 我有一个习惯,通过为每个命名空间创建一个目录来组织我的命名空间。 例如,如果我创建这样的东西:

namespace test { namespace blabla  { ... } }

我会创建一个目录 test 并在其中创建一个目录 blabla,但是 CMake 不会让它们出现在我的 Visual Studio 或 Xcode 项目中。

有什么诀窍吗?

【问题讨论】:

  • 你想在你的项目中出现什么?文件?文件夹?
  • 文件夹和其中的文件。
  • 以及(如何)您尝试添加它们?
  • 当我使用 add_executable() 命令时,我给它我的源文件。还有其他方法吗?

标签: c++ visual-studio-2010 xcode4 cmake


【解决方案1】:

尝试使用source_group 命令。在调用add_executable 之后添加source_group 语句以根据需要构建您的项目,例如:

source_group("test\\blabla" FILES file1.cpp file2.cpp)

【讨论】:

  • 它似乎成功了!谢谢你。但是,我只得到文件夹“blabla”,而不是文件夹“test”,上面有blabla。有什么想法吗?
  • 嵌套源代码组(使用反斜杠)适用于 CMake 2.8.5 和 Visual Studio 2008 Pro。
  • 我还没有测试过 vs 而是 Xcode。我会及时向大家发布。再次感谢!
  • 它适用于 Visual Studio,但由于某种原因不适用于 xcode。我在 C++ 中使用 xcode 越多,我认为我应该越多地使用 eclipse,即使我设置的 link_directories 可以在 VS 上正常工作,但不能在 Xcode 上工作。
【解决方案2】:

从 Xcode 6 开始,接受的解决方案不适用于 Xcode。但是,有一个简单的解决方法:

  1. 从 Xcode 项目中删除对源文件的引用 (在边栏中删除它们,然后选择“删除参考”)。
  2. 重新添加根文件夹,确保选中“创建组”,然后选择 所需的目标。

多田!现在您的文件应该与 Finder 中的文件夹结构匹配。

【讨论】:

    【解决方案3】:

    对于在 VS 中对项目进行分组,您可以在 CMake 中使用这种方式(2.8.3 之后的版本)

    //turn on using solution folders
    set_property( GLOBAL PROPERTY USE_FOLDERS ON)
    
    //add test projects under 1 folder 'Test-projects'
    FOREACH(TEST ${TESTS_LIST})
        add_test(NAME ${TEST}  COMMAND $<TARGET_FILE:${TEST}>)
        set_tests_properties( ${TEST} PROPERTIES TIMEOUT 1) 
        set_property(TARGET ${TEST} PROPERTY FOLDER "Test-projects")
    ENDFOREACH(TEST)
    

    【讨论】:

    • 小旁注:Visual Studio Express 不支持文件夹,因此必须首先设置 USE_FOLDERS
    【解决方案4】:

    对于 Visual Studio:确保所有文件名都是唯一的。编译dir/file.cpp 的结果将是obj/file.obj。当编译器编译otherdir/file.cpp 时,结果将是obj/file.obj - 之前的目标文件将被覆盖。在 VS 2008 和更早的版本中就是这种情况,我怀疑在 VS 2010 中仍然是这种情况。

    我也按照你的方式组织源代码。我最终使用了以下命名方案:如果源文件的路径是Dir/Subdir/AnotherSubDir/File.cpp,那么我将文件命名为Dir/Subdir/AnotherSubdir/DirSubdirAnotherSubdirFile.cpp。丑陋的?是的。但它胜过一个不会链接的项目,而且很容易弄清楚文件名应该是什么。我想你可以在文件上附加一个序列号,但我认为它会更难看。此外,如果您忘记使文件名唯一,则该错误并不那么明显。尤其是当你累了,而你的未婚夫/妻子正在等待时......

    【讨论】:

    • 我明白你在说什么,但我没有这个问题,但我会记住它,因为它很可能会发生。谢谢
    • 抱歉有点跑题了,但我想我应该提醒你一下。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多