我对CMake在解决方案中组织代码时遇到了一些问题。 我习惯于通过为每个命名空间创建目录来组织我的命名空间。 例如,如果我创建这样的东西:
namespace test { namespace blabla { ... } }
我会创建一个目录测试,并在其中创建一个目录blabla,但是CMake不会让它们出现在我的Visual Studio或Xcode项目中。
有没有办法完成它?
答案 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不起作用。但是,有一个简单的解决方法:
多田!现在你的文件应该与Finder中的文件夹结构相匹配。