2012-06-10 31 views
6

Tôi gặp sự cố với CMake trong đó tôi không thể thêm tệp của mình vào thư mục/bộ lọc bên trong Visual Studio.Thêm tệp vào source_group trong CMake

# Add folders to filters 
file(GLOB_RECURSE DATABASE_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h) 
file(GLOB_RECURSE LOG_SRCS   RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h) 
file(GLOB_RECURSE NETWORK_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h) 
file(GLOB_RECURSE THREADING_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h) 
file(GLOB_RECURSE UTILS_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h) 

source_group(database FILES ${DATABASE_SRCS}) 
source_group(log  FILES ${LOG_SRCS}) 
source_group(network FILES ${NETWORK_SRCS}) 
source_group(threading FILES ${THREADING_SRCS}) 
source_group(utils  FILES ${UTILS_SRCS}) 

Một vấn đề mà có thể gây ra vấn đề này là các GLOB_RECURSE 's trả lại hồ sơ có trong ${CMAKE_CURRENT_SOURCE_DIR} nhưng so với các /database (hoặc bất kỳ thư mục khác).

Ví dụ: có tệp trong database/ được gọi là dbcore.cpp. Tệp này được thêm vào DATABASE_SRCSdbcore.cpp, nhưng các tệp trong thư mục chính (ví dụ: ${CMAKE_CURRENT_SOURCE_DIR}) cũng được thêm, nhưng có đường dẫn tương đối với database/, chẳng hạn như ../common.h.

Một vấn đề khác có thể là bên trong dự án Visual Studio, bộ lọc "Tệp tiêu đề" và "Tệp nguồn" mặc định đã tồn tại.

Tôi đang sử dụng CMake 2.8.6 và Visual Studio 11/2012.

Trả lời

8

Để tránh file(GLOB_RECURSE... cuộc gọi trở lại tất cả các file mọi thời gian, sử dụng một cái gì đó như:

file(GLOB_RECURSE DATABASE_SRCS 
     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.h) 

này sẽ thiết lập giá trị của DATABASE_SRCS-database/dbcore.cpp;database/dbcore.h;... mà nên source_group cuộc gọi của bạn hoạt động tốt.

Tuy nhiên, từ tài liệu cho file(GLOB:

Chúng tôi không khuyên bạn sử dụng GLOB để thu thập một danh sách các file nguồn từ cây nguồn của bạn. Nếu không có tệp CMakeLists.txt thay đổi khi nguồn được thêm thì hệ thống tạo được tạo không thể biết khi nào cần yêu cầu CMake tạo lại.

Để xem chi tiết đầy đủ, chạy

cmake --help-command file 

Cách thường khuyến cáo liệt kê các file dự án là để thêm chúng bằng tay để các CMakeLists.txt.

Để trả lời vấn đề cuối cùng của bạn, nếu "Tệp tiêu đề" và "Tệp nguồn" mặc định của Visual Studio trống (nghĩa là tất cả các tệp xuất hiện trong các thư mục khác), chúng không xuất hiện. Sự hiện diện của các mặc định này không ảnh hưởng đến bất kỳ thư mục nào được tạo bằng cách sử dụng source_group.

Các vấn đề liên quan