2017-08-18 16 views
19

Chúng tôi đang sử dụng CMake, Qt và Visual Studio. Nhiều dự án của chúng tôi được định cấu hình để chạy automoc, thông qua việc chuyển AUTOMOC ON đến add_library.CMake 3.9 hiện tạo các dự án "tự động" trong Visual Studio?

Gần đây chúng tôi đã cập nhật lên CMake 3.9.1 và Visual Studio hiện hiển thị dự án bổ sung cho mỗi thư viện tự động hóa. Ví dụ, bây giờ chúng ta có một dự án "Core" và một dự án "Core_autogen" trong giải pháp của chúng ta.

(điều này xảy ra ở cả VS2015 và VS2017, và cả hai Qt 5.8 và 5.9.1)

này có một vài hậu quả khó chịu:

  • Gần gấp đôi so với số dự án, thêm rất nhiều rối loạn thị giác.
  • Tự động không còn chạy khi xây dựng một dự án riêng lẻ thông qua giao diện người dùng, điều này có thể dẫn đến lỗi tinh vi khi gỡ lỗi các vấn đề xây dựng cho một dự án cụ thể.

Có ai biết liệu có cách nào để khôi phục hành vi CMake trước đó cho tự động không?

Hoặc chặn điều đó, một số cách để giảm thiểu sự lộn xộn thị giác của các dự án tự động?

+0

Có thể 'set_property (GLOBAL PROPERTY USE_FOLDERS ON)' sẽ trợ giúp? –

+0

Xem [vấn đề 17205] (https://gitlab.kitware.com/cmake/cmake/issues/17205) trong gitlab CMake. Nó báo cáo phần '_autogen' của vấn đề này và liên kết đến một yêu cầu hợp nhất được mong đợi để giải quyết nó (hiện đang được nhắm mục tiêu ở bản phát hành 3.10.0). –

Trả lời

9

Theo tài liệu CMake v3.9, bạn có thể sử dụng AUTOGEN_BUILD_DIR để di chuyển các tệp đã tạo sang một thư mục khác.

Theo mặc định CMake sử dụng <dir>/<target-name>_autogen nơi:

<dir>CMAKE_CURRENT_BINARY_DIR<target-name>NAME

Hoặc từ AUTOMOC tài sản mà bạn có thể sử dụng:

Thuộc tính AUTOGEN_TARGETS_FOLDER thể toàn cầu được sử dụng để nhóm automoc nhắm mục tiêu cùng nhau trong một IDE, ví dụ: trong MSVS.

Thuộc tính toàn cầu AUTOGEN_SOURCE_GROUP có thể được sử dụng để nhóm các tệp do AUTOMOC tạo cùng nhau trong IDE, ví dụ: trong MSVS.

Hy vọng điều này sẽ hữu ích.

+1

Cảm ơn các đề xuất, nhưng điều đó không hoàn toàn hữu ích. AUTOGEN_TARGETS_FOLDER đặt vị trí nơi tệp được tạo (ví dụ: mocs_compilation.cpp) được lưu trữ. CMake vẫn tạo ra các dự án "_autogen" bất kể. Trước 3.9, CMake chạy moc như một phần của bước prebuild của dự án. Bây giờ có vẻ như để tạo ra một dự án thêm cho mỗi dự án automoc'd. –

6

này thu thập tất cả các dự án autogen trong một thư mục:

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER AutoMoc) 

enter image description here

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