2011-08-17 7 views
7

Tôi đang gặp một chút vấn đề với CMake về việc tổ chức mã của tôi trong một giải pháp. Tôi có thói quen tổ chức không gian tên của mình bằng cách tạo một thư mục cho mỗi tên miền. Ví dụ nếu tôi tạo ra một cái gì đó như thế này:Làm cách nào để sắp xếp các tệp của tôi bằng CMake?

namespace test { namespace blabla { ... } } 

tôi sẽ tạo ra một bài kiểm tra thư mục và bên trong của nó một blabla thư mục, tuy nhiên CMake không làm cho chúng xuất hiện trong Visual Studio của tôi, dự án Xcode.

Có mẹo nào để hoàn thành công việc không?

+0

bạn muốn xuất hiện điều gì trong dự án của mình? Tập tài liệu? các thư mục? – Philipp

+0

Các thư mục và tệp trong đó. – lollancf37

+0

và (làm thế nào) bạn đã cố thêm chúng? – Philipp

Trả lời

11

Thử sử dụng lệnh source_group. Sau khi cuộc gọi đến add_executable thêm source_group báo cáo để cấu trúc dự án của bạn như bạn muốn, ví dụ .:

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

Dường như làm điều này! Cảm ơn bạn. Tuy nhiên tôi chỉ nhận được thư mục "blabla" chứ không phải thư mục "test" với blabla trên đó. Bất kỳ ý tưởng ? – lollancf37

+0

Các nhóm nguồn lồng nhau (sử dụng dấu gạch chéo ngược) hoạt động với tôi với CMake 2.8.5 và Visual Studio 2008 Pro. – sakra

+0

Tôi chưa thử nghiệm trên vs nhưng Xcode. Tôi sẽ giữ cho bạn được đăng. Cảm ơn một lần nữa! – lollancf37

2

Đối với Visual Studio: Hãy chắc chắn rằng tất cả các tên tập tin là duy nhất. Kết quả của việc biên dịch dir/file.cpp sẽ là obj/file.obj. Khi biên dịch biên dịch otherdir/file.cpp kết quả sẽ là obj/file.obj - tệp đối tượng trước sẽ bị ghi đè. Đây là trường hợp trong phiên bản VS 2008 và phiên bản cũ hơn, và tôi nghi ngờ nó vẫn xảy ra trong VS 2010.

Tôi cũng sắp xếp mã nguồn theo cách bạn làm. Tôi đã kết thúc bằng cách sử dụng lược đồ đặt tên sau: nếu đường dẫn đến tệp nguồn sẽ là Dir/Subdir/AnotherSubDir/File.cpp, thì tôi sẽ đặt tên tệp là Dir/Subdir/AnotherSubdir/DirSubdirAnotherSubdirFile.cpp. Xấu xí? Vâng. Nhưng nó đánh bại một dự án không liên kết, và thật dễ dàng để tìm ra tên tập tin nên là gì. Tôi đoán bạn có thể chỉ cần thêm một số thứ tự trên tập tin, nhưng tôi nghĩ rằng nó sẽ xấu hơn. Ngoài ra, nếu bạn quên làm cho tên tệp duy nhất, lỗi đó không phải là tất cả những gì rõ ràng để phát hiện. Đặc biệt là khi bạn đang mệt mỏi, và hôn phu/vợ của bạn đang chờ ...

+0

Tôi nhận được những gì bạn đang nói nhưng tôi không có vấn đề này nhưng tôi sẽ ghi nhớ nó vì nó rất có thể sẽ xảy ra. Cảm ơn – lollancf37

+0

Xin lỗi vì đã được một chút tắt chủ đề, nhưng tôi figured tôi nên cung cấp cho bạn một người đứng lên. Chúc mừng! –

4

Đối với nhóm dự án trong VS bạn có thể sử dụng cách này trong CMake (ver sau 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) 
+0

Lưu ý nhỏ: Visual Studio Express không hỗ trợ các thư mục đó là lý do tại sao USE_FOLDERS phải được đặt ở vị trí đầu tiên – Infinite

-2

Các giải pháp chấp nhận không làm việc cho Xcode như của Xcode 6. Tuy nhiên, có một cách giải quyết đơn giản:

  1. xóa các tham chiếu đến file nguồn từ dự án Xcode của bạn (xóa chúng trong thanh bên, sau đó chọn "Remove Reference").
  2. Thêm lại thư mục gốc, đảm bảo chọn "Tạo nhóm" và chọn (các) mục tiêu mong muốn.

Tada! Bây giờ các tệp của bạn phải khớp với cấu trúc thư mục trong Trình tìm kiếm.