如何使用CMake整理我的文件?

时间:2011-08-17 10:34:58

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

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

namespace test { namespace blabla  { ... } }

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

有没有办法完成它?

4 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:5)

对于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)

答案 2 :(得分:2)

对于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。丑陋?是。但它击败了一个不会链接的项目,并且很容易弄清楚文件名应该是什么。我想你可以在文件上附加一个序列号,但我认为它会更加丑陋。此外,如果您忘记使文件名唯一,则错误并不是那么明显。特别是当你累了,你的未婚夫/妻子正在等待......

答案 3 :(得分:-2)

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

  1. 从Xcode项目中删除对源文件的引用 (在侧栏中删除它们,然后选择&#34;删除参考&#34;)。
  2. 添加根文件夹,确保&#34;创建组&#34;选中,然后选择 期望的目标。
  3. 多田!现在你的文件应该与Finder中的文件夹结构相匹配。